0

jQuery を使用して、div 内の多くの要素にイベント ハンドラーを割り当てています。単一の要素でjQueryの「ネイティブ」onまたはメソッドを使用している場合、すべてが機能します。clickただし、ループ内で実行しようとすると、何も起こりません。

動作しない次のコードがあります。

$tags = $("#some_div p");
var len = $tags.length;
for(var i = 0; i < len; i++)
{
    $tags[i].on('click', function(){ alert("hi"); });
}

そして、このコードは機能します:

$tags = $("#some_div p");
var len = $tags.length;
for(var i = 0; i < len; i++)
{
    $tags[i].onclick = function() { alert("hello"); };
}

onclick(function()...)最初のケースでも試しましたが、試し$.forEachましたが、動作は常に同じです。ここで JS フィドルを作成しました: http://jsfiddle.net/fM2ar/

jQueryの経験はあまりありませんが、ドキュメントを読んだところ、最初の方法が機能するはずです。どんな助けも大歓迎です。

4

2 に答える 2

2

$tags[i]jQuery オブジェクトではなく、DOMElement を提供します。onclickはDOMプロパティであり、これが機能する理由です。on()は jQuery メソッドであるため、機能しません。

on()メソッドを使用するには、DOMElement を jQuery オブジェクトでラップするだけです。

$($tags[i]).on('click', function(){ alert("hi"); });

または、 jQuery オブジェクトにラップされたposition の要素を返すeq(i)メソッドを使用することもできます。i

$tags.eq(i).on('click', function(){ alert("hi"); });
于 2013-05-26T14:57:41.560 に答える
1

forループはまったく必要ありません:

$("#some_div p").on('click', function() {
    alert( this.innerHTML );
});
于 2013-05-26T15:10:28.123 に答える