filter()参数没有给出正确的输出

时间:2013-06-24 23:52:05

标签: javascript jquery html validation

我今天的问题可能很简单。我试图获取没有文本的表单内的所有必需元素(它们是输入类型,文本)。这是我的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语句中的代码也永远不会为真。

感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

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

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

inputs.filter(function() {
     return this.required && this.value=="";
     // equivalent: $(this).prop("required")
     // and         $(this).prop("value") or $(this).val()
})

答案 1 :(得分:3)

如果您要选择空的所需输入,则选择器错误。空间代表祖先关系,父母/子女:

if (inputs.filter('[required][value=""]').length) { // Element is `required` and empty
    ....
}

答案 2 :(得分:0)

您的代码有 2个问题

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

原来是

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

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

下面的输入
<input type="text" name="title[]" id="name_" />

因为它首先具有无值属性。还需要属性

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

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

<强> Check Fiddle