new[ish] .on 構文を使用すると、ユーザーがトリガーするイベントに簡単にバインドできます。例えば:
$(document).on('click', '#my-div', function() {
alert("You clicked it!");
});
しかし、ユーザーがトリガーしない可能性のあるものへのバインドはどうでしょうか?
$(document).on('somethingaddedtoDOM', '#my-element', function() {
alert("Nothing");
});
これは、私が話していることをよりよく理解するための jsFiddle です。 http://jsfiddle.net/NedRW/3/
わかりました、ここに同様の問題があります。スライダーを DOM に動的に追加したいとしましょう。この例では sudoSlider です。Mustache.js と Mustache.jquery プラグインを使用してみましょう。
HTML
...
<div id="slider-target-container">
</div>
...
モデルを見る:
var viewModel = [
{
image: "path-to-image"
},
{
image: "path-to-image"
},
{
image: "path-to-image"
}
];
口ひげのテンプレート
<script type="text/html" id="slider-template">
<div id="slider">
<ul>
<li>{{image}}</li>
</ul>
</div>
</script>
Javascript
$(document).ready(function() {
$.Mustache.addFromDom();
var html = $('#slider-template');
$('#slider-target-container').appendTo(mustache.render(html, viewModel);
});
ここで、明らかに、新しく作成したスライダー HTML で sudoSlider プラグインを呼び出す必要があります。しかし、私が知る限り、新しい .on() メソッドではそれを行うことはできません
以前は機能していたもの:
$('#slider').live(function() {
$(this).sudoSlider();
});
しかし今、私が知る限り、新しいアイテムが dom に追加された場合 (そして、追加された場合は特定の識別子を使用して) は方法がないため、まだ存在しない可能性のあるものにプラグインをバインドする方法がありません。これはもっと理にかなっていますか?