2

我今天的问题可能很简单。我正在尝试在没有文本的表单中获取所有必需的元素(它们的类型为输入、文本)。这是我的 JS:

var inputs = $('#form').find(':input');
if(inputs.filter('[required] [value=""]').first().focus().length)
//do something

这是 HTML 中的元素:

<input type="text" name="title[]" id="name_" required />

我应该补充一点,这个输入元素是由 javascript 动态添加的,也就是说,它是在发生特定操作后附加的。

真正的问题是,即使我没有为给定的文本字段键入值,if 语句中的代码也永远不会为真。

任何帮助表示赞赏。

4

3 回答 3

5

value输入标签的属性value与输入元素的属性不同。第一个恰好在 HTML 中,在 DOM 中解析并充当defaultValue. 后一个是代表当前输入的输入的动态值。另请参阅.prop() 与 .attr()

您的元素甚至没有value属性,因此它永远不会匹配选择器。相反,您将需要使用过滤器函数来检查属性:

inputs.filter(function() {
     return this.required && this.value=="";
     // equivalent: $(this).prop("required")
     // and         $(this).prop("value") or $(this).val()
})
于 2013-06-25T00:03:20.643 回答
3

如果您的意思是选择所需的空输入,则您的选择器是错误的。空格代表祖先关系,父/子:

if (inputs.filter('[required][value=""]').length) { // Element is `required` and empty
    ....
}
于 2013-06-25T00:03:11.350 回答
0

您的代码有2 个问题

('[required] [value=""]')

应该是

('[required][value=""]')

使用上面的选择器,你永远不能选择下面的输入

<input type="text" name="title[]" id="name_" />

因为它首先没有价值属性。还缺少必需的属性

与您的选择器匹配的输入将具有此签名

<input type="text" required="true" value="" name="title[]" id="name_" />

检查小提琴

于 2013-06-25T00:02:36.403 回答