【问题标题】:Please help to optimize simple JQuery functions请帮忙优化简单的JQuery函数
【发布时间】:2013-12-06 23:46:32
【问题描述】:

我有一个这样的jQuery函数:

$("input").focus(function () {
    $(this).addClass('focus');
});
$("input").blur(function () {
    $(this).removeClass('focus');
});

$("select").focus(function () {
    $(this).addClass('focus');
});
$("select").blur(function () {
    $(this).removeClass('focus');
});

$("textarea").focus(function () {
    $(this).addClass('focus');
});
$("textarea").blur(function () {
    $(this).removeClass('focus');
});

是否可以针对更少的代码进行优化?

【问题讨论】:

    标签: javascript jquery optimization


    【解决方案1】:
    $("input,select,textarea").focus(function() {$(this).toggleClass('focus')})
                              .blur(function() {$(this).toggleClass('focus')});
    

    $("input,select,textarea").bind('focus blur',function() {$(this).toggleClass('focus')});
    

    【讨论】:

    • 对不起,我是这个优秀网站的新手,现在接受答案。
    • 这段代码的问题是,它只有在没有其他脚本修改类名的情况下才能正常工作。如果有另一个脚本,它将在 textarea 处于焦点时删除焦点类,模糊处理程序将再次添加该类。是的,这种情况可能不会在 99.9% 的情况下发生,但仍然可能发生在 0.1% 的情况下,因此使用 toggleClass 并不是最好的方法。这可以通过将函数更改为 $("input,select,textarea").bind('focus blur',function (event) { $(this).toggleClass('focus', event && event.type == = '焦点');})
    【解决方案2】:

    这应该可行

    $("input, textarea, select").focus(function () {
       $(this).addClass('focus');
    }).blur(function(){
       $(this).removeClass('focus');
    });
    

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多