我正在尝试找到具有特定类(item_number)的第一个空输入字段
以下无效
$("#pos_transaction_line_line input[value=''].item_number:first");
如下所示
$("#pos_transaction_line_line input.item_number").each(function(){
if(!$(this).val()){
//get the field here
return false;
}
});
检查代码后,我意识到这种情况正在发生,因为即使我在文本字段中输入了一些值,文本字段的值仍然为空。 所以,我的问题是在一个manaully输入文本字段中的值之后,文本字段的值会在什么条件下填充。
其次,还有其他更好的方法来获得该领域
答案 0 :(得分:1)
这是属性和属性之间的区别,value属性用于设置输入元素的初始值,之后对值进行的任何更改都将在value属性中更新。最初,value
属性的值将被复制到value
属性,从而给出输入字段的初始值。
我们在这里使用的选择器是attribute selector,它没有看到对value属性所做的更改,这就是为什么会发生这种情况。
答案 1 :(得分:1)
您发现更新<input>
的值会更新其值property
(HTMLInputElement.value
),而不更新value
属性({{1} })。
我建议,虽然我不确定任何性能优势,但以下内容:
<input value="...">
然而,上述方法确实会受到以下事实的影响:它将检索与选择器匹配的所有元素,然后在返回页面中的第一个匹配项之前循环遍历// selects the collection of elements represented by the selector,
// then filters that collection:
$("#pos_transaction_line_line input.item_number").filter(function(){
// retains those <input>s the length of whose value property
// is zero:
return this.value.length === 0;
// then retrieves the first element (as a jQuery object still):
}).eq(0);
方法中的这些元素。 / p>
这确实会带来性能损失,但如果您在面对不同情况和要求时可能需要扩大选择范围,则可以替代使用filter()
。
参考文献:
答案 2 :(得分:-1)
使用eq()
尝试此代码 if($('#pos_transaction_line_line input.item_number').eq(0).val() !== '');