12

DataTables.Net プラグインでラップするグリッドでデリゲート メソッドを使用しようとしています。私は当初、期待どおりに機能するこのコードを持っていました。

    $("#myGrid tbody tr").click(function() {
        var id = $(this).children('td').eq(0).text();
        alert(id);
    });

ただし、ページング サイズを変更すると、新しい行には関数を呼び出すクリック イベントがありません。私は、新しい JQuery デリゲート メソッドがまさに私が望んでいたことを行うべきだと判断しました。ただし、どの tr 要素に対しても何もしません。

これが機能しない理由を誰でも説明できますか:

    $('#myGrid tbody').delegate('tr', 'click', function() {
        var id = $(this).children('td').eq(0).text();
        alert(id);
    }); 

セレクターのさまざまな組み合わせを試しましたが、どれも機能しません。

4

5 に答える 5

15

代わりにこれを試してください:

$('#myGrid').delegate('tr', 'click', function() {
  var id = $(this).children('td').eq(0).text();
  alert(id);
});

tbody のいくつかのイベントが台無しになったり、tbody が操作されたりする可能性は十分にあります。テーブル全体もこの問題に悩まされているとは思えません。

于 2010-03-10T16:13:52.163 に答える
4

これを使って:

$("#myGrid tbody tr").live('click', function() {
    var id = $(this).children('td').eq(0).text();
    alert(id);
});

.live()将来の要素の現在のために動作します。

于 2010-03-10T15:55:45.337 に答える
3

舞台裏では、binddelegateおよびliveすべてがメソッド を使用しますon

でいくつか問題が発生したため、代わりdelegateに を使い始めました。呼び出しを にon変換するのは簡単です。最初の引数と 2 番目の引数を交換するだけです。delegateon

これ:

 $('#myGrid tbody').delegate('tr', 'click', function() {
        var id = $(this).children('td').eq(0).text();
        alert(id);
    }); 

これになります:

 $('#myGrid tbody').on('click', 'tr', function() {
        var id = $(this).children('td').eq(0).text();
        alert(id);
    }); 

ところで:livejQueryの新しいバージョンでは非推奨です

于 2012-07-03T12:07:30.797 に答える
1

これを試して

$('#myGrid tbody').delegate('click', 'tr', function() {
    var id = $(this).children('td').eq(0).text();
    alert(id);
});

また

$('body').delegate('click', '#myGrid tbody tr', function() {
    var id = $(this).children('td').eq(0).text();
    alert(id);
}); 
于 2010-06-04T09:40:17.740 に答える
-4

新しい行が動的に追加されている場合はlive、項目に対してメソッドdelegateを使用する必要があります。live

于 2010-03-10T15:56:20.443 に答える