循环遍历所需的输入元素时,jQuery“OR”无法正常工作

时间:2013-05-09 18:58:16

标签: javascript jquery input

我正在为各种输入编写一个小的必需HTML5属性回退。到目前为止一切都很顺利,但是在检查单选按钮是':checked'并使用'OR'||时我遇到了麻烦循环中的运算符:

if (self.val() === '' || self.is(':not(:checked)')) {

由于某种原因,当我添加它时,它会略微破坏脚本,并指示输入字段(type = text)是空的。是否有更好的方法来循环并指出输入类型“文本”和“广播”之间的区别?

这是循环:

var reqClass = $('.required')
        reqClass.each(function(){

            var self = $(this)

            // if empty
            if (self.val() === '' || self.is(':not(:checked)')) {

                // if it doesn't have require-checked class
                if (!self.hasClass('require-checked')) {

                    self.addClass('require-checked')
                    self.parent().append('<span class="form-error">This field is required.</span>')

                }

                e.preventDefault()
                //$('.form-submit').attr('disabled', true)

            // if it's been checked, but there is a value now   
            } else if (self.hasClass('require-checked') && !(self.val() === '')) {

                self.siblings('.form-error').hide()

            }

        })

“回退”浏览器显然存在类,并且即时更改。这是一个JSFiddle,谢谢你的帮助:

http://jsfiddle.net/cyncV/2/

3 个答案:

答案 0 :(得分:1)

文本框确实是:not(:checked)(即使其中包含文本),因此文本框在不显示时显示为空。

也许像

if (self.val() === '' || self.is(':checkbox:not(:checked)') || self.is(':radio:not(:checked)')

答案 1 :(得分:1)

var self = this;

var empty = self.type=='checkbox' ? !self.checked : self.value=='';

if (empty) {
    // do stuff
}

FIDDLE

答案 2 :(得分:0)

有一个解决方案:

var checked = (self.is(':checkbox') || self.is(':radio')) ?  self.is(':not(:checked)') : false;
if (self.val() === '' || checked) {}

添加一个小条件,如果输入是复选框或无线电,它看起来是否已选中,否则返回false。然后将结果传递给if条件。