以前从未问过问题,因为我通常可以通过在这里狩猎来找到答案,但这让我很难过。我不假装是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()
一起使用时,其行为不像预期的那样。