多くの場合、次のような追加機能にフックされた要素があります。
$('.myfav').autocomplete();
$('.myfav').datepicker();
$('.myfav').click(somefunction);
しかし、このクラスのより多くのインスタンスがいくつかのコードを介して動的に生成されると、新しい$('.myfav')
ものは無効になり、再配線が必要になるため、次のようにします。
$("#somelink").click(function(){
//generate 10 new $('.myfav') and append them to the DOM
//re-wire them again as in the block above
$('.myfav').autocomplete();
$('.myfav').datepicker();
$('.myfav').click(somefunction);
});
これが意味するのは、2つの同一のコードブロックができてしまうということです。1つは最初のページの読み込み用で、もう1つは動的に生成される新しい要素を再配線するためのものです。これはDRYコードではなく、あまり効率的ではありません。
これは本当にこれを行う唯一の方法ですか、それとも別のベストプラクティスがありますか?私の腸は、これよりも効率的なものが必要だと言っています(コードのDRYを支援するためにも)。
アップデート
cletusが説明しているように、.liveは.clickでうまく機能するようです。
$('.myfav').live("click", somefunction);
しかし、.autocompleteのようなカスタムセットのプラグインで試してみましたが、機能しませんでした。私はこれを試しました:
$('.myfav').live("click", autocomplete("somefile.php", {max: 15, mustMatch: true}));
したがって、ライブはこれらのカスタムプラグインを処理できるようには見えません(もちろん、私は間違っている可能性があります。何か知っている場合は更新してください)