[英]Prevent firefox from highlighting “invalid” (html5) checkboxes at form first load
我正在使用webshim ( polyfill解决方案)对表单使用html5验证。 Webshim对组复选框进行了验证-您必须检查组中的至少一个:( 在这里 ,搜索data-grouprequired )
我做了改进的验证,其中还包括必须选中的最小和最大框。
这两个工作(这里的工作小提琴与两个),但在Firefox(不镀铬也不IE11)第一次加载页面之后,“无效”复选框已经以红色突出显示,如只用Firefox给出fiddle-看到。
所以我的问题是:如何防止Firefox在页面加载时突出显示那些“无效”的内容? (用户甚至没有机会填写这些字段)
我创造了这个小提琴让您可以轻松尝试的事情: 小提琴
谢谢。
这是代码:html:
<form action="#">
<div class="form-row">
<label>checkboxes with webshim groupRequired:</label>
<div id="foo5">
<input name="b" type="checkbox" data-grouprequired="" />
<input name="b" type="checkbox" />
<input name="b" type="checkbox" />
<input name="b" type="checkbox" />
</div>
</div>
<div class="form-row">
<label>checkboxes with my custom min/max (min:2, max:3) :</label>
<div id="foo">
<input id="cb1" class="cb" name="a" data-max="3" data-min="2" type="checkbox" />
<input id="cb2" class="cb" name="a" data-max="3" data-min="2" type="checkbox" />
<input id="cb3" class="cb" name="a" data-max="3" data-min="2" type="checkbox" />
<input id="cb4" class="cb" name="a" data-max="3" data-min="2" type="checkbox" />
</div>
</div>
<div class="form-row">
<label for="name">Name</label>
<input class="foo3" type="text" id="name" required="" />
</div>
<div class="form-row">
<input type="submit" />
</div>
</form>
jQuery的:
//webshim.setOptions
webshim.setOptions("forms", {
lazyCustomMessages: true,
replaceValidationUI: true,
customDatalist: "auto",
addValidators: true
});
//request the features you need:
webshim.polyfill('forms');
$(function () {
// use all implemented API-features on DOM-ready
//webshim.activeLang(); //returns current set language
webshim.activeLang('en'); //set locale to en
i3 = 0;
i4 = 0;
first_arr = {};
$('.cb').each(function (index, wrap) {
first_arr[$(this).attr('id')] = ++i3;
$(this).on('validatevalue', function (e, extra) {
//failed fix attempt:
if (false && first_arr[$(this).attr('id')] > 0) {
first_arr[$(this).attr('id')] = --i4;
return;
}//end of failed fix attempt
var elem = e.currentTarget;
var min = $(e.currentTarget).data('min');
var max = $(e.currentTarget).data('max');
var total = $(elem).parents('#foo').find('input:checked').length;
if (min && min > 0 && max && max > 0 && (total > max || total < min)) {
return 'Must select between ' + min + ' to ' + max;
}
if (min && min > 0 && total < min) {
return "can't select less than " + min;
}
if (max && max > 0 && total > max) {
return "can't select more than " + max;
}
$('.cb').not($(elem)).each(function () {
$(this).setCustomValidity("");
});
});
});
});
我还将添加Webshim如何进行自己的自定义,复选框组所需的验证以及其github文件 :
addCustomValidityRule('grouprequired', function(elem, val, data){
var form, name;
if(!('grouprequired' in data) || elem.type !== 'checkbox' || !(name = elem.name)){return;}
if(!data.grouprequired.checkboxes){
data.grouprequired = {};
data.grouprequired.checkboxes = $( ((form = $.prop(elem, 'form')) && form[name]) || document.getElementsByName(name)).filter('[type="checkbox"]');
data.grouprequired.checkboxes
.off('click.groupRequired')
.on('click.groupRequired', function(){
if((data.customMismatchedRule == 'grouprequired') == this.checked){
$(elem).trigger('updatevalidation.webshims');
}
})
;
data.grouprequired.checkboxes.not(elem).removeData('grouprequired');
}
return !(data.grouprequired.checkboxes.filter(':checked:enabled')[0]);
}, 'Please check one of these checkboxes.');
尝试:
input[type='checkbox']:invalid { box-shadow: none !important; }
请参阅: https : //hacks.mozilla.org/2010/11/firefox-4-html5-forms/
在页面上查找“:invalid”
您可能还需要:
input[type='checkbox']:required { box-shadow: none !important; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.