2

この構文を使用して、イベントが動的に追加されたli要素にバインドされるようにしています

$('ul.list').on('click', 'li', function() {

   //do something

});

次のようなイベントマップで同じものをアーカイブしようとしました:

$('ul.list').hammer({
    css_hacks : false
}).on({
     swipe : function(event){
        //do something
     },
     doubletap : function(event){
        //some more code
     }
}, 'li');

しかし、まったく機能していません。イベントを要素に直接バインドすると、li既存の要素では正常に機能しますが、動的に追加された要素では機能しません。

$('ul.list').find('li').hammer({
    css_hacks : false
}).on({
     swipe : function(event){
        //do something
     },
     doubletap : function(event){
        //some more code
     }
});

イベントマップを将来の要素にバインドする方法は?

4

2 に答える 2

2

on()2つのパラメーターを使用することは、古いbind()機能と同等です。

行ったように機能させたい場合live()は、最初の例のように3番目の引数を渡します。

また、メソッドで関数をチェーンするときに問題が発生した場合は、hammer()メソッドを調べて、「this」が返されることを確認してください。

$('ul.list').on({
    swipe : function() { ... },
    doubletap : function() { ... }
},'li');
于 2012-12-10T22:24:08.773 に答える
0

jqueryドキュメントを調べると、jquery live

チェーンメソッドはサポートされていません例: $("a").find(".offsite, .external").live( ... ); は有効ではなく、期待どおりに動作しません。

これを行うことができます:

$('ul.list > li').hammer({
    css_hacks : false
}).live({
     swipe : function(event){
        //do something
     },
     doubletap : function(event){
        //some more code
     }
});

しかし、それは非推奨です。最初の例はうまくいくはずです。

私はこれを試しました:

<ul>
<li>aaa</li>
<li>bbb</li>
</ul>

$("ul").on({
    click:function(){
        $(this).html('clicked');
        },
    dblclick:function(){
        $(this).html('double clicked');
        }
    },'li');

それはうまくいくので、あなたの問題はイベントの名前かもしれません。

于 2012-12-10T23:09:17.737 に答える