【问题标题】:Multiple classes on keyup jquerykeyup jquery上的多个类
【发布时间】:2012-06-13 23:26:06
【问题描述】:

我有一个函数,我想在 keyup 上执行 2 个不同的 classtextfields。 下面的代码在只有一个类分配给keyup 时运行良好,但是当我添加第二个class 时它可以工作,但有很多滞后。 class 本身工作正常,所以我假设我不正确地将第二个 class 添加到事件处理程序中。代码是:

$(document).ready(function(){

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

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

        });
    });

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

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

    });
});

【问题讨论】:

    标签: jquery class event-handling onkeyup


    【解决方案1】:

    您似乎连接了太多事件 - 因此存在滞后。 您也不需要 .each,它用于迭代每个元素。 尝试简化如下:

    $(document).ready(function(){
    
        $('.class1,.class2').keyup(function(){
            myFunction1();
            if ($(this).hasClass('class2')) {
                myFunction2();
            }
        });
    });
    

    【讨论】:

    • +1,因为我可能会这样做,但我确实提供了一个替代方案,具体取决于用户是否不想要广泛的 if 语句。
    【解决方案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));    
        });
    
    });​
    

    【讨论】:

    • 感谢您的选择!很高兴看到不同的方式来获得更深入的了解!向你致敬!
    【解决方案3】:

    您正在绑定大量事件处理程序,您可以让事件冒泡并稍后捕获它:

     $('body').on('keyup', '.class1, .class2', myFunction1);
     $('body').on('keyup', '.class2', myFunction2);
    

    【讨论】:

    • 这很有趣,我无法让它正常工作,但我敢打赌我错过了一些东西,我会搞砸它,感谢您提供替代信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多