【发布时间】:2010-04-02 12:44:49
【问题描述】:
我有一个验证脚本,用于检查 data-* 属性以确定哪些字段是必需的。如果一个元素具有 'data-required-if' 属性(它有一个 jQuery 选择器作为它的值),它会检查是否找到任何与该选择器匹配的元素。如果找到,则该字段为必填项。它执行类似于以下的操作:
$('[data-required-if]').each(function () {
var selector = $(this).attr('data-required-if'),
required = false;
if ( !$(selector).length ) {
required = true;
// do something if this element is empty
}
});
这很好用,但是有一个问题。当您使用属性选择器根据文本字段的当前值进行过滤时,它实际上是根据文本字段的初始值进行过滤的。
<input
type='text'
id='myinput'
value='initial text'
/>
<input
type='text'
id='dependent_input'
value=''
data-required-if="#myinput[value='']"
/>
// Step 1: type "foobar" in #myinput
// Step 2: run these lines of code:
<script>
$('#myinput').val() //=> returns "foobar"
$('#myinput[value="foobar"]').length //=> returns 0
</script>
我明白它为什么这样做。 jQuery 可能在后台使用 getAttribute()。有没有其他方法可以使用纯 jQuery 选择器根据输入框的当前值进行过滤?
【问题讨论】:
-
注意:我刚刚也注意到了以下怪癖... $('#myinput[value]').length // => 返回 1 $('#patch_process').filter(' [value]').length // => 返回 0 我假设这意味着在后端 jQuery 代码中,filter 使用 .value 而 $() 使用 .getAttribute('value')。不幸的是,这对我没有帮助。我需要一个选择器。
标签: jquery textbox attributes selector