0

li要素を動的に作成します。

<ul>
<li id="1">1</li>
<li id="2">2</li>
<li id="3">3</li>
[...]
</ul>

li_idli id (=1,2,3...) を返す配列値です。

li次のように、コード内のすべての要素にさまざまな関数をバインドするにはどうすればよいですか。

for (li_id in lids)
{
console.log(li_id);                         
$(li_id).bind('mouseover', function() {
console.log(li_id);
});
}

上記は機能しません。正しい書き方は?

live()代わりに、ステートメントの外側のように、1,2,3...[...] ではなくbind()、配列の最後の要素の ID を表示します...lidsconsole.log()$

4

2 に答える 2

1

http://www.mennovanslooten.nl/blog/post/62

また

ループ内の JavaScript クロージャー – 簡単な実用例

HTML を考えると、コードは 2 つの方法で記述できます。

jQuery 1.4 Event.dataパラメータの使用:

var lids = [1,2,3];
for (i in lids) {
    var li_id = lids[i];

    $('#' + li_id).bind('mouseover', { id: li_id }, function(ev) {
        console.log(ev.data.id);
    });
}

または、匿名関数を使用してクロージャーを作成します。

var lids = [1,2,3];
for (i in lids) {
    var li_id = lids[i];

    // an anonymous function 
    (function (id) {
        $('#' + id).bind('mouseover', function() {
            console.log(id);
        });        
    })(li_id); // ...called every time with different id

}

この場合、私は方法を好みjQuery Event.dataます。

于 2010-08-09T20:30:19.107 に答える
0

したがって、閉鎖すると正しい答えは次のようになります。

$(li_id).bind('mouseover', function(val) { 
                             return function() { 
                                console.log(val); 
                             } 
                           }(li_id));

ただし、これは、ループの値を関数に渡す必要がある場合にのみ必要です。

于 2010-08-09T20:34:14.533 に答える