ClassYuan のブログ http://www.classyuan.com/。以下にいくつかの例を示します。
1. HTML 要素を使用してイベントをロードすると、イベントはロードと同時に実行されます。
エラー コード:
$("#btnLoad" ).bind ("click",GetProduct());
正しいコード
$("#btnLoad").bind("click", function() { GetProduct() });
このコードの Bind メソッドは無視しました。 APIのbind(type,[data],fn)
fnを単純な関数と勘違いしたため、このコードではロード時にfnを1回実行することになります。
これは書き方の見落としです。 . 原因が分かる方アドバイスを頂ければ幸いです。
2 変数スコープの問題 (jqueryの問題ではないようです。jsと.netの違いです。)
function text() {
2 for (var i = 0; i 3 $("
削除 ").attr({ id: "hr_" i, href: "javascript:;" }).addClass("btnCss").bind("click", function () { tes(i) } ).appendTo(".div_list");
4 }
5 }
6 関数 tes(id) {
7 アラート(id); 8 }
この関数は、対応する ID を通知するために必要です。これは、3 つの
タグが表示される関数です。すべて 3 です。
を見てください。
変数スコープの問題を理解してください。tes 関数に渡されるパラメータはループ終了後の i の値であるため、すべて 3 です。
.netとは違うようです。
最後に、解決策です - -..
に $(this) を渡すだけです。 3. イベントの実行順序の問題
2
コードをコピーします コードは次のとおりです: idwrap('< a href="http://www.baidu.com">');
上記は、初心者である私が初めて jquery を使用したときに遭遇した問題であり、成長の過程として考えてください。
最初の質問
$('#btnLoad').bind('click', GetProduct)
バインディング イベントは関数と GetProduct() に関連付けられていることを覚えておいてください。括弧内は、関数の戻り値を取得します。そして、GetProduct の戻り値は明らかに関数ではありません
$("#btnLoad").bind("click",GetProduct());
は次のように変更されます:
$("#btnLoad") ).bind("click",GetProduct);
試してください。
GetProduct() は関数を実行して値を返しますが、返された値の型は fn ではありません。
2 番目の問題
実際、これは .NET にも存在します。これはクロージャで取得されるのは i 変数のアドレスであり、i は常に変化します。このアドレスにアクセスすると、取得された値も常に変化するため、すべての tes は i 変数の最後の値、つまり 3 を使用します。
この問題は次のように解決されます (コードを簡略化しています):
for (var i = 0; i (関数(i) {
$('
削除').appendTo('.div_list') click', function() { tes(i) });
})(i);
}
この書き方の原理が理解できなくても大丈夫です。最初にこの形式を覚えておいてください。そうすれば、将来同じような問題に遭遇することになります。つまり、元の絵で言えば、 (function() { xxx })(); のレイヤーです。実際には非常に単純です。関数を渡すとき、i は基本型変数として value によって渡されます。つまり、この無名関数が呼び出されるたびに、i の現在の値がこの関数にコピーされます。は互いに独立しており、
3 番目の質問
の外側の影響を受けません。a に href 属性が指定されていない場合、href はデフォルトで現在のページのアドレスになるため、その後にジャンプします。クリック。したがって、インターネットには次のような一般的な処理方法がいくつかあります。
1.
dfa 2.
dfa 3.
dfa