我的表单验证有问题: 我有两个DIV容器,每个容器有两个答案。我想验证最小的一个收音机或一个文本元素中有一个值。
但我的jQuery选择器不起作用:
HTML:
<div class="mandatory">
<input type="radio" value="1" name="answer1" /> Option 1
<input type="radio" value="2" name="answer1" /> Option 2
</div>
<div class="mandatory">
<input type="radio" value="1" name="answer2" /> Option 1
<input type="text" name="answer2" />
</div>
JS:
$('.mandatory').each(function(){
var elem = $(this).find('input:checked, input:text[value!=""]');
console.log(elem.attr('name')); //Always "answer2"
});
它返回了输入元素,尽管它是空的。 这是我的代码:http://fiddle.jshell.net/Pisi2012/n9S2Y/
感谢您的帮助!
答案 0 :(得分:1)
您的输入没有值属性,因此 属性 选择器匹配,因为该值不是empy字符串,只是没有值?< / p>
更改
<input type="text" name="answer2" />
到
<input type="text" name="answer2" value="" />
答案 1 :(得分:0)
试试这段代码:
$('.mandatory').each(function(){
var elem = $(this).find('input:checked, input[type="text"][value!=""]');
console.log(elem.attr('name')); //Always "answer2"
});
答案 2 :(得分:0)
我假设你需要mandatory
div的列表,它不满足给定的条件,然后尝试
var els = $('.mandatory').filter(function(){
var $this = $(this);
return !$this.find(':radio:checked').length && !$this.find(':text').filter(function(){return $.trim(this.value) != ""}).length
});
演示:Fiddle
答案 3 :(得分:0)
你可以尝试Glyn Jones的另一个解决方案:
How can I select a hidden field by value?
所以它可能看起来像这样:
var elem = $(this).find('input:checked, input:text').filter(function () { $(this).val() != '' });