Bri*_*ion 12 jquery jquery-validate material-design-lite
看起来像是jQuery的jQuery.validate的正常用例已经出错了.看到这个要点.
这很好用:
<h1>Without MDL</h1>
<form id="foo">
<input type="radio" name="bar" value="1" /> 1
<input type="radio" name="bar" value="2" /> 2
<input type="submit" />
</form>
<script>
$(function() {
$('#foo').validate({
rules: {
"bar": {
required: true
},
},
errorPlacement: function(error, element) {
console.log(element);
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
这没有任何作用:
<h1>With MDL</h1>
<form id="zha">
<label for="baz__1" class="mdl-radio mdl-js-radio">
<input type="radio" name="baz" value="1" id="baz__1" class="mdl-radio__button" /> 1
</label>
<label for="baz__2" class="mdl-radio mdl-js-radio">
<input type="radio" name="baz" value="2" id="baz__2" class="mdl-radio__button" /> 2
</label>
<input type="submit" id="butt"/>
</form>
<script>
$(function() {
$('#zha').validate({
rules: {
"baz": {
required: true
},
},
errorPlacement: function(error, element) {
console.log(element);
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
在MDL版本中,附加jQuery.validator.setDefaults({ debug: true })
无效 - 如在零调试输出中一样.删除任何一个mdl-js-radio
或mdl-radio__button
使其按预期工作.我的直觉是MDL以断开jQuery对name=
属性的访问权限的方式更新DOM ,但我找不到任何证据来支持MDL源代码.
有人在这里有集成吗?
经过一番研究,我认为我找到了解决问题的方法.这是一个有趣的.
对我来说,您的代码适用于Firefox,但不适用于Chrome和Safari.原因很简单.MDL删除输入单选按钮的CSS默认样式以隐藏它们(不显示:无,仅高度:0,宽度:0,不透明度...).Chrome和Safari认为就像有"隐藏"一样.浏览jQuery.validate代码,我意识到输入单选按钮从未被发现.(您的代码适用于Chrome和Safari上的经典输入).为什么?因为如果你看一下jQuery.validate的默认设置,你会发现他忽略了隐藏的输入.
defaults: {
...
ignore: ":hidden",
...
onfocusin: function( element, event ) {
Run Code Online (Sandbox Code Playgroud)
和过滤功能
elements: function() {
var validator = this,
rulesCache = {};
// select all valid inputs inside the form (no submit or reset buttons)
return $(this.currentForm)
.find("input, select, textarea")
.not(":submit, :reset, :image, [disabled]")
.not( this.settings.ignore ) // This line
.filter(function() {
if ( !this.name && validator.settings.debug && window.console ) {
console.error( "%o has no name assigned", this);
}
// select only the first element for each name, and only those with rules specified
if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {
return false;
}
rulesCache[this.name] = true;
return true;
});
},
Run Code Online (Sandbox Code Playgroud)
为了防止这种情况,只需添加以下代码:
jQuery.validator.setDefaults({
ignore: ""
});
Run Code Online (Sandbox Code Playgroud)
这个对我有用.希望对你有效.
归档时间: |
|
查看次数: |
1374 次 |
最近记录: |