2012-01-19 10 views
3

多くのリスト要素(3000に近い)を持つWebページがあります。私はこれらのためのクリックイベントハンドラとホバリングイベント(jqueryを使用)を添付しています。 IE8であまりにも多くのイベントハンドラを添付するとIE8メモリリーク/パフォーマンスの問題が発生する

$('li').click(function (e){ 
    // do processing here 
}) 

$('li').hover(function (e){ 
    // do processing here for hover in 
}, function (e) { 
    // do processing here hover out 
}) 

、私はいくつかの減速に気づき始めていますし、私の最初の推測では、イベントハンドラの数はメモリリーク/消費の問題を引き起こしているということです。これはChrome、FF、IE9でうまくいきます。

誰かがこの動作に気付いたことはありますか?

jqueryデリゲートを使用すると、イベントハンドラが親コンテナに存在し、各リスト要素には存在しないため、この問題が解決されるとも考えていました。次のようなもの -

$("#somecontainer").delegate('li', 'click', function() { 
    //do processing for click here. 
}) 

これまでの洞察は大歓迎です。ありがとう!

答えて

5

私はまた、イベントハンドラは、親コンテナに住んで、そしてない 1各リスト要素のためになるのでjqueryのデリゲートを使用すると、この問題、 を解決するだろうと考えていました。

絶対に。それともthe "new" way行います

$("#somecontainer").on("click", "li", function() { 
    //do processing for click here. 
}); 
+0

うん、あなたの直感は正しかった、とkarim79は現在のベストプラクティス(「LI」の後に余分なコンマは、魚に見えますが、私はAPIをダブルチェックしていなかった)提供してきました。 –

+0

@GregPettit - 余分なコンマは、私の誤植で、APIにいくつかの素晴らしい新しい追加されていません:) – karim79

+1

ハハ、OK。 :-) '.on()'の使用を促進するための歓声。あまりにも多くの人々がまだすべてのことの '.live()'を勧めているのを見ている! –

関連する問題