【发布时间】:2018-02-13 05:54:56
【问题描述】:
我正在尝试向某些代码添加条件验证器。它基本上可以工作,除了一件事:我需要从 html 属性而不是从 jquery 代码中检索参数。我一直无法弄清楚如何做到这一点。目前,我的代码似乎将代码的“依赖”部分中的 return 语句的结果作为参数发送到“genrule”部分。因此,“genrule”从数据属性中接收“true”而不是“50”或“500”。
这是我一直在工作的 jsfiddle 的链接:http://jsfiddle.net/iceape/9eyy2h1f/5/
下面的嵌入代码似乎没有执行。
$.validator.addMethod('genrule', function(value, element, param) {
console.log("addmethod: " + param + " " + param[0] + " " + param[1]);
console.log("value: " + value);
return (value >= param);
});
$('#test').validate({
debug: true,
rules: {
foo: {
required: true,
genrule: {
depends: function(element) {
console.log("bar: " + $('#bar').val());
return ($('#bar').val() === "0");
}
}
},
bar: {
required: true,
genrule: {
depends: function(element) {
return ($('#foo').val() === "0");
}
}
}
},
submitHandler: function(form) {
alert('Success');
return false;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<form id="test">
<input id="foo" name="foo" type="text" data-rule-genrule="500" data-msg-genrule="If bar is 0, then foo must be >= 500" />
<br/>
<input id="bar" name="bar" type="text" data-rule-genrule="50" data-msg-genrule="If foo is 0, then bar must be >= 50" />
<br/>
<input type="submit" />
</form>
编辑: JSFiddle 上的最终工作代码:http://jsfiddle.net/iceape/9eyy2h1f/
SO 上的最终工作代码:
$.validator.addMethod('genrule', function(value, element, param) {
return (value >= param);
});
$('#test').validate({
rules: {
foo: {
required: function(element) {
return $.trim($('#bar').val()).length === 0;
},
genrule: {
param: $('#foo').data('rule-genrule'),
depends: function(element) {
return ($.trim($('#foo').val()).length > 0);
}
}
},
bar: {
required: function(element) {
return $.trim($('#foo').val()).length === 0;
},
genrule: {
param: $('#bar').data('rule-genrule'),
depends: function(element) {
return ($.trim($('#bar').val()).length > 0);
}
}
}
},
submitHandler: function(form) {
alert('Success');
return false;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<form id="test">
<input id="foo" name="foo" type="text" data-rule-genrule="500" data-msg-genrule="Foo must be >= 500" />
<br/>
<input id="bar" name="bar" type="text" data-rule-genrule="50" data-msg-genrule="Bar must be >= 50" />
<br/>
<input type="submit" />
</form>
【问题讨论】:
-
您的包含是向后的。在包含任何插件之前,您必须包含 jQuery。
-
谢谢。现在已经解决了。
标签: javascript jquery jquery-validate custom-data-attribute