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