1

keyup2 つの異なるに対して実行したい関数がclassありtextfieldsます。以下のコードは、1 つのクラスのみが割り当てられている場合はうまく機能しますkeyupが、2 番目を追加するclassと機能しますが、多くの遅延があります。どちらでも問題なく動作するので、イベント ハンドラーclassに 2 番目を不適切に追加したと思います。classコードは次のとおりです。

$(document).ready(function(){

    $(".class1").each(function() {

        //!!!!!!! .class2 here adds lag !!!!!!!!!!
        $('.class1,.class2').keyup(function(){
            myFunction1();

        });
    });

    $(".class2").each(function() {

        $(this).keyup(function(){
            myFunction2();
        });

    });
});
4

3 に答える 3

8

あまりにも多くのイベントを配線しているようです - したがって、遅れがあります。また、各要素を反復するための .each も必要ありません。次のように単純化してみてください。

$(document).ready(function(){

    $('.class1,.class2').keyup(function(){
        myFunction1();
        if ($(this).hasClass('class2')) {
            myFunction2();
        }
    });
});
于 2012-06-13T23:32:30.440 に答える
1

または、2 つの個別のイベントを追加して、関数を呼び出すこともできます。それは他の答えに似ており、おそらくスタイルに依存します。

デモ: http://jsfiddle.net/lucuma/wzEJc/

コード例:

function myFunction1(el) {
    el.addClass('mclass1');
};

function myFunction2(el) {
    el.addClass('mclass2');
};


$(document).ready(function(){

    $('.class1').keyup(function(){
        myFunction1($(this));    
    });
    $('.class2').keyup(function(){
        myFunction1($(this));
        myFunction2($(this));    
    });

});​
于 2012-06-13T23:41:08.777 に答える
1

イベントをバブリングさせて後でキャプチャできる、かなりの数のイベントハンドラーをバインドしています。

 $('body').on('keyup', '.class1, .class2', myFunction1);
 $('body').on('keyup', '.class2', myFunction2);
于 2012-06-13T23:42:09.280 に答える