1

私はこのような検索入力へのバインディングを持っています:

$(document).on('tablebeforefilter.results_filter',
   '#results_table:not(.bound)',
   function (e, data) {
     e.target.class += "bound";
     // stuff
   });

このクラスを使用してbound、ページがリロードされた場合に要素が再バインドされないようにしています(Jquery Mobileこれは、ユーザーが2つのページ間を行ったり来たりするときに発生するように使用しています。

私の問題は、このようにするとバインディングが正しく設定されることですが、要素に「bound」クラスを追加するため、ハンドラーがトリガーされるのはおそらく1回だけです。

質問
なぜこんな感じなのですか?$(document) & some elementこの要素にどのクラスを追加しても、バインディングセットが設定されて実行されると思いました。ページが再解析された場合にのみ、boundクラスはバインディングを再度アタッチできなくなります。boundブロッキングクラスを追加すると、関数がトリガーされなくなるのはなぜですか?

ありがとう!

4

2 に答える 2

3

.classは文字列です。"bound"したがって、文字列に追加して、まったく新しいクラス"results_filter"を取得します。"results_filterbound"したがって、.on()セレクターは一致しなくなります。を使用する場合.classは、空白も追加する必要があります。

e.target.class += " bound";

これにより、クラスが追加されbound、古いクラスが保持されます。addClass()またはremoveClass()jQueryを使用できるクラスを簡単に処理するため。

于 2013-03-19T10:01:35.373 に答える
1

".on" での jQuery の使用は、変化する html 構造で使用するように設計されています。したがって、クラス「バインド」を追加すると、イベントはトリガーされなくなります。

代わりにこのようなものを使用してみてください

$(document).on('tablebeforefilter.results_filter', '#results_table', function (e, data) {
    var $table = $(this);
    if ($table.hasClass('bound') == false) {
        $table.addClass('bound');
    } else {
        // stuff with bound class
    }
    // common stuff for both cases
});
于 2013-03-19T10:01:44.000 に答える