いくつかの要素に変更を適用するJavaScriptと、そのような要素をさらにロードする関数があります。そのように:
<ol id="test"><li>click</li></ol>
<script type="text/javascript">
$(function() {
$('OL').delegate("li","click",function(){
$('#test').append('<li>click</li>');
});
</script>
これはデリゲートの基本機能であり、機能します。複数の<li>
要素をクリックできます。
問題は、私がしたいことです、さらに次のことをします:
$(function() {
$('li').css('color','red');
//this is just an example, I don't need to paint the text red :)
});
li
ページの読み込み時に読み込まれるものだけでなく、すべての場合。
これらの変更を何にも添付できませんでした(上記の付録の要素をロードしたことを示すイベントはありません)。$('li').css('color','red');
また、appendを呼び出すたびに(または実際に作業しているajaxコールバックで)思い出すことができることも知っています。しかし、私には、さまざまなHTMLを返す多くのajax呼び出しと、この要素に対して実行する必要のある多くのプラグインとjqueryスタッフを備えたシステムがあります。私は、ajaxが成功するたびに呼び出される巨大な「更新」機能を実行したくありません。
今のところ私が見つけた唯一の解決策は、すべてを任意のイベントにバインドし、次のようなすべてのajaxロードでそのイベントのトリガー呼び出しを実行することです。
<ol id="test"><li>click</li></ol>
<script type="text/javascript">
$(function() {
$('OL').delegate("li","click",function(){
$('#test').append('<li>click</li>');
$('#test').children().trigger('load');
});
</script>
<script type="text/javascript">
$(function() {
$('OL').delegate("li","load",function(){
$(this).css('color','red');
});
});
</script>
これは、最初にロードされたすべての要素に対して機能します。したがって、追加のコードが必要になりますが、機能します。
誰かがより良い解決策を持っていますか?非イベントの「ライブ」を行う方法はありますか?
ありがとう!
編集 コードの「赤」の例に関して...私が行う必要のある変更は、他の多くのものの中でも特に次のとおりです。
('BODY').delegate(".mcs_container","load",function(){
$(this).mCustomScrollbar("vertical",400,"easeOutCirc",1.05,"auto","no","no",0);
}).trigger('load');
したがって、関数をトリガーするだけで機能すると思います。
編集2
ここで実用的な例を作成しました:http:
//jsfiddle.net/THHNS/5/
私が達成しようとしているのは、余分なトリガーを回避できるようにすることです$('LI').trigger('focus');
編集3ON で十分で、より良いはずのときにデリゲートを使用していました。更新された例:http: //jsfiddle.net/THHNS/26/