0

我正在为各种输入编写一个小的必需的 HTML5 属性后备。到目前为止进展顺利,但是在检查单选按钮是否为 ':checked' 并使用 'OR' || 时遇到问题 循环中的运算符:

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

出于某种原因,当我添加它时,它会稍微破坏脚本,并且会指示输入字段(类型=文本)在不是空的时候是空的。有没有更好的方法来循环并指出输入类型“文本”和“无线电”之间的区别?

这是循环:

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/

4

3 回答 3

1
var self = this;

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

if (empty) {
    // do stuff
}

小提琴

于 2013-05-09T19:09:48.483 回答
1

一个文本框确实是:not(:checked)(即使它里面有文本),所以文本框在没有时显示为空。

也许像

if (self.val() === '' || self.is(':checkbox:not(:checked)') || self.is(':radio:not(:checked)')
于 2013-05-09T19:02:56.583 回答
0

有一个解决方案:

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

只需添加一个小条件,如果输入是复选框或单选,则查看是否已选中,否则返回 false。然后将结果传递给 if 条件。

于 2013-05-09T19:14:11.297 回答