如何在不重复jQuery addClass的情况下做得更好?

时间:2013-01-03 11:10:05

标签: javascript jquery forms

在页面加载时在我的表单上,我将输入中的默认文本设置为浅灰色,如下所示:

var formInputs = $('#notifyForm input');
formInputs.addClass('defaultText');

然后我让他们使用removeClass在焦点上变回黑色。一切正常。我遇到的问题是,如果出现错误并且页面重新加载以显示PHP错误消息,那么仍在输入中的用户文本将变为灰色。我的解决方案是:

formInputs.addClass(function()
{
    if($(this).attr('value') === $(this).attr('title'))
    {
        $(this).addClass('defaultText');
    }
});

但我知道在addClass处理程序中调用addClass会出现问题。任何人都可以提出更好的方法吗?谢谢。

2 个答案:

答案 0 :(得分:8)

从传递给addClass的函数中,您可以返回一个字符串,该字符串将是您要添加的类名。试试这个:

formInputs.addClass(function() {
    if (this.value === this.title)
        return 'defaultText';
});

答案 1 :(得分:1)

除了Rory提供的答案之外,还可以根据addClass()之前的标准进行选择:

 formInputs.filter(function() {
    return this.value === this.title;
 }).addClass('defaultText');

顺便说一下,有点令我惊讶的是,addClass()方法的速度比filter()方法快一半(在Chrome 23 / Win XP中慢43%)(仍然是一个相当小的优化,虽然)。

参考文献: