Jquery 如果表单字段无效,则添加类

Jquery 如果表单字段无效,则添加类,jquery,jquery-validate,Jquery,Jquery Validate,使用jqueryvalidation进行ajax表单提交,如果任何文本输入有类“error”,我想向errorContainer添加一个类。看起来很简单,但我认为这是一个范围问题 if ($('#myInput').hasClass('error')) { $('#errorContainer').addClass('foo'); } 我把它放在提交处理程序外部,提交处理程序内部,验证调用外部,验证调用内部。。。都没有用。有人成功地完成了这个简单的任务吗?您可以这样做: if ($('

使用jqueryvalidation进行ajax表单提交,如果任何文本输入有类“error”,我想向errorContainer添加一个类。看起来很简单,但我认为这是一个范围问题

if ($('#myInput').hasClass('error')) { 
  $('#errorContainer').addClass('foo'); 
}
我把它放在提交处理程序外部,提交处理程序内部,验证调用外部,验证调用内部。。。都没有用。有人成功地完成了这个简单的任务吗?

您可以这样做:

if ($('input[type=text].error').length > 0) { 
  $('#errorContainer').addClass('foo'); 
}
选择器
$('input[type=text].error')
将返回类似数组的对象,即使只有一个匹配项。因此,询问数组是否
hasClass('error')
没有意义

您真正想要做的是在要检查错误类的元素周围放置一个容器。您可能已经有了一个类似表单的容器(如果它是表单上的所有输入)。然后你可以这样做:

<form id="myForm">
  <input type="text" name="a" />
  <textarea name="b"></textarea>
  <input type="submit" value="Submit" />
</form>
这里有一个例子。请注意,使用将提供更多的输入类型,而不仅仅是您想要的
输入。

您可以执行以下操作:

if ($('input[type=text].error').length > 0) { 
  $('#errorContainer').addClass('foo'); 
}
选择器
$('input[type=text].error')
将返回类似数组的对象,即使只有一个匹配项。因此,询问数组是否
hasClass('error')
没有意义

您真正想要做的是在要检查错误类的元素周围放置一个容器。您可能已经有了一个类似表单的容器(如果它是表单上的所有输入)。然后你可以这样做:

<form id="myForm">
  <input type="text" name="a" />
  <textarea name="b"></textarea>
  <input type="submit" value="Submit" />
</form>

这里有一个例子。请注意,使用将提供更多的输入类型,而不仅仅是您想要的
input

大多数返回值的函数(例如
.val()
.hasClass()
,等等)将仅作用于jQuery对象中所选元素组中的第一个元素

通常在这些情况下,您需要做的是使用函数迭代所有元素,并对每个元素进行测试


但是,由于您正在测试一个类,您可以按照Cymen的回答中的详细说明修改您的条件。

大多数返回值的函数(例如
.val()
.hasClass()
,等等)将只作用于jQuery对象中所选元素组中的第一个元素

通常在这些情况下,您需要做的是使用函数迭代所有元素,并对每个元素进行测试

但是,由于您正在测试一个类,您可以按照Cymen的回答中的详细说明修改您的条件。

您只需使用并通过条件即可

$('#errorContainer').toggleClass('foo',$('input[type=text].error').length > 0);
因此,如果有任何类错误。。添加类foo。。否则删除类foo

您只需使用并传递条件即可

$('#errorContainer').toggleClass('foo',$('input[type=text].error').length > 0);

因此,如果有任何类错误。。添加类foo。。else remove类foo

$('input[type=text]')是一个通用选择器。。你似乎正在同时检查所有的文本框。。如果您有多个文本框,它将检查页面中的第一个文本框。。试着说得更具体一点,我似乎无法找出问题所在,所以我所做的就是在错误容器中添加一个类“error”。然后在提交处理程序的成功函数中删除它。$('input[type=text]')是一个通用选择器。。你似乎正在同时检查所有的文本框。。如果您有多个文本框,它将检查页面中的第一个文本框。。试着说得更具体一点,我似乎无法找出问题所在,所以我所做的就是在错误容器中添加一个类“error”。然后在submit handler中的success函数中删除它。从技术上讲,调用传递给选择器的jQuery函数-例如
$('input[type=text].error')
-返回类似jQuery对象的数组,而不是实际数组。结果对象确实有一个
.hasClass()
函数,它只作用于匹配的第一个元素。看起来很简单。无法使其工作,请记住Im使用jQuery验证,您是否将其放在验证调用的范围内?外部不起作用您可以先运行验证。您可以通过调用
$(“#myForm”).validate()来实现这一点。似乎什么都不起作用。不断得到“意外的托克”errors@AnthonyGrist是的。我想保持它的简单,但可能过于简化了。我已经稍微更新了答案。从技术上讲,调用传递给选择器的jQuery函数-例如
$('input[type=text].error'))
-返回类似jQuery对象的数组,而不是实际数组。生成的对象有一个
.hasClass()
函数,它只作用于匹配的第一个元素。似乎很简单。无法使其工作,请记住,Im使用jQuery validate,是否将其放在验证调用的范围内?外部不起作用您可以先运行验证。您可以通过调用
$(“#myForm”)。validate()
。似乎什么都不起作用。不断收到“意外”的消息errors@AnthonyGrist是的。我想保持简单,但我可能过于简化了。我已经稍微更新了答案。