选择器不起作用

时间:2013-07-19 08:12:24

标签: jquery jquery-selectors

我的表单验证有问题: 我有两个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/

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

您的输入没有值属性,因此 属性 选择器匹配,因为该值不是empy字符串,只是没有值?< / p>

更改

<input type="text" name="answer2" />

<input type="text" name="answer2" value="" />

FIDDLE

答案 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() != '' });