我正在为各种输入编写一个小的必需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,谢谢你的帮助:
答案 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
}
答案 2 :(得分:0)
有一个解决方案:
var checked = (self.is(':checkbox') || self.is(':radio')) ? self.is(':not(:checked)') : false;
if (self.val() === '' || checked) {}
添加一个小条件,如果输入是复选框或无线电,它看起来是否已选中,否则返回false。然后将结果传递给if条件。