0

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

4 回答 4

1

您的输入没有 value 属性,因此属性选择器匹配,因为 value 不是空字符串,所以没有 value ?

改变

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

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

小提琴

于 2013-07-19T08:18:08.937 回答
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
});

演示:小提琴

于 2013-07-19T08:33:04.803 回答
0

您可以从另一个线程尝试 Glyn Jones 的解决方案:

如何按值选择隐藏字段?

所以它可能看起来像这样:

var elem = $(this).find('input:checked, input:text').filter(function () { $(this).val() != '' });
于 2013-08-14T22:21:00.610 回答
0

试试这个代码:

$('.mandatory').each(function(){
    var elem = $(this).find('input:checked, input[type="text"][value!=""]');
    console.log(elem.attr('name')); //Always "answer2"
});
于 2013-07-19T08:16:26.790 回答