在jQuery .east中使用$(this)



以前从未问过问题,因为我通常可以通过在这里狩猎来找到答案,但这让我很难过。我不假装是JS/JQ专家,但我对两者都很熟悉。我要做的是将一个预定义的CSS类设置为形式中的一组文本输入元素(不幸的是,我正在使用的Django版本无法为我执行此操作,目前我无法将其升级为我没有时间):

function setBsCss() {
var fields = $("input[type='text'], textarea").serializeArray();
jQuery.each(fields, function(i, field){
    if ((this.name != "csrfmiddlewaretoken") && (this.name.indexOf("recaptcha") == -1)) {
        $(this).addClass('someclass');
    }
});

}

我没有遇到任何错误,但是该类根本没有被添加到元素中。我可以更改代码,并简单地使用名称或ID选择器,但是如果可能的话,我更喜欢将类应用于对象本身。

任何帮助都非常感谢!

我可以确认行为,但我不明白。

要解决这个问题,您可以避免将jQuery对象转换为数组,而只需使用.each()而不是jQuery.each()

$("input[type='text'], textarea").each(function (i, field) {
    if ((this.name != "csrfmiddlewaretoken") && (this.name.indexOf("recaptcha") == -1)) {
        $(this).addClass('someclass');
    }
});

请参阅完整的JSFIDDLE

更新:

问题在于.serializeArray()

.serializearray()
描述:编码一组元素作为名称和值的数组。
.serializearray()方法创建一个对象的JavaScript数组,准备编码为JSON字符串。

serializeArray()div 不是创建一个DOM元素的数组,而只是name/value对的数组。因此,this是指一个对象

{
    name: "other",
    value: "somevalue"
}

addClass()一起使用时,其行为不像预期的那样。

最新更新