数日前、私が職場でフロントエンドJSコードを書いていたとき、私はトラバーサル要素に遭遇し、クリックイベントを追加しました。午後中ずっと調整したのはこの問題でした。最後に、私は仕事を休みから家に帰り、オンラインで情報を検索して、それを解決する方法を見つけました。 (PS:「JQuery Basic Tutorial」の第4版でループバインディング処理プログラムの内容も読みました。当時は注意深く読んでいなかったので、覚えていませんでした。)
偉大なマスターがこの種の状況を知っているなら、彼は窓を閉め、主に私のような初心者のためにこれらを書くことができます。ありがとう!
誰もが見ることができるように、最初に間違った例を投稿しましょう。 (jQueryは例で使用されています。JQueryライブラリをインポートしてください)
コードコピーは次のとおりです。
<!doctype html public " - // w3c // dtd xhtml 1.0 transitional // en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<Meta http-equiv = "content-type" content = "text /html; charset = utf-8" />
<title>ループバインディングハンドラー</title>
<スクリプトsrc = "js/jquery-2.1.1.min.js"> </scrip>
<script type = "text/javascript">
$(function(){
for(var i = 1; i <= 4; i ++){
$( "#btn"+i).get(0).onclick = function(){
アラート(i);
}
}
});
</script>
</head>
<body>
<ボタンID = "btn1">ボタン1 </button>
<ボタンID = "btn2">ボタン2 </button>
<ボタンID = "btn3">ボタン3 </button>
<ボタンID = "btn4">ボタン4 </button>
</body>
</html>
このコードが実行されたら、ボタンをクリックすると、ポップアップアラートに表示されるデータが表示されます。私は常にボタン1〜4を考えており、アラートの対応する数字も1〜4です。そう思うなら、あなたは間違っています。
各ボタンをクリックすると、ナンバー4がアラートに表示されます。私はそれを期待していませんでした!
参照のためにいくつかのソリューションを書いてください!
最初のタイプは、関数を書き込み、この関数の関数を返すことです
コードコピーは次のとおりです。
<script type = "text/javascript">
$(function(){
for(var i = 1; i <= 4; i ++){
$( "#btn"+i).get(0).onclick = btnclick(i);
}
});
var btnclick = function(value){
return function(){
アラート(値);
}
}
</script>
2番目のタイプ:コール関数式をすぐに使用します
(function(value){
//コードブロック
})(i)//これは、機能式をすぐに呼び出すことです
コードコピーは次のとおりです。
<script type = "text/javascript">
$(function(){
for(var i = 1; i <= 4; i ++){
$( "#btn"+i).get(0).onclick =(function(value){
return function(){
アラート(値);
} })(私);
}
});
</script>
3番目のタイプ:jQueryを使用した各関数
コードコピーは次のとおりです。
<script type = "text/javascript">
$(function(){
$ .each([1,2,3,4]、function(index、value){
$( "#btn"+value).get(0).onclick = function(){
アラート(値);
}
});
});
</script>
上記の3つの状況を使用すると、最初はその状況を回避できます。
get(0)とは、jQueryオブジェクトをDOMオブジェクトに変換することを指します。
上記は、JS閉鎖におけるループバインディングハンドラーについての私の個人的な理解です。私はあなたとそれを共有します。友達に役立つことを願っています。