2013-06-24 53 views
2

今天我的问题可能相当简单。我试图获取没有文本的表单中的所有必需元素(它们是输入类型,文本类型)。这里是我的JS:filter()参数没有给出正确的输出

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语句内部的代码也不会成立。

任何帮助表示赞赏。

+2

''[required] [value =“”]'与[[required] [value =“”]'不一样你的意思是'[必填],[值=“”]'? – elclanrs

+0

有没有空间的区别?你必须在开玩笑我哈哈。这是没有空间的那个不工作 – Jose

+1

你可以在html中添加'required'的位置吗 – JasonM

回答

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() 
}) 
+0

+1更好的解释! –

+0

这样做很有意义,它可能会成为我的目标。但是,我在一个单独的项目中运行它,并且工作正常,将其导出到单独的项目时出现问题。你知道为什么或如何工作? – Jose

+0

也许你有一个'>'的地方,但我会希望它始终匹配选择器。除非你像'.attr(“value”,“...”)那样调用它。 – Bergi

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

+0

+1。此外,它没有'required'属性:-) – Bergi

+0

没错......忘了提及:) –

+0

他试图在某人输入某些内容后使用过滤器来检查值。他正在尝试的方法是错误的,如果有人在输入中实际输入了某些内容,[value =“”]将不起作用。 @Bergi对他的回答是正确的。 –

3

如果你的意思是选择所需的输入是空的,你选择的是错的。空间代表祖先的关系,父母/子女:

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