我是JavaScript的新手,我在使用一些我继承过的JQuery.validate代码时遇到了一些问题。如果答案很明显,请原谅我:)
我有以下验证方法声明:
jQuery.validator.addMethod("myMethod", function(value, element, param) {
/*...*/
if (document.getElementById("DOMID") {
/*...*/
}
/*...*/
)};
本质上,该方法是检查某个DOM对象是否存在,如果确实存在,它会设置一些不同的验证参数。我要验证的对象是包含在父<select>
中的一组<div id="DOMID">
输入,但是有几个不同的“DOMID”情况,每个都有略微不同的验证规则 - 因此检查内部方法。我希望每当其中一个更改其值时验证<select>
。然后我激活了这个:
$(".myClass").validate({
onchange: true,
});
将myClass
应用于我要验证的所有<select>
输入。
最后,我有这个注册:
jQuery.validator.addClassRules(
{
myClass:
{
myMethod: true,
}
}
这在Chrome中效果很好 - 每次更改<select>
选项之一时都会应用验证。
然而,在Firefox中,情况并非如此 - 我发现我必须模糊选择才能激活验证。那么,这是一个问题:为什么Chrome和Firefox之间的变化行为会有所不同?或者情况并非如此,我的代码中还有其他东西导致这种不一致?
我的第二个问题是关于我觉得非常奇怪的事情。在尝试修复Firefox直到模糊时才验证的问题时,我将JavaScript getElementByID...
更改为使用jQuery,而不是:
if ($("#DOMID").length > 0) { [...]
(我也试过if ($("#DOMID").get(0))
,但他们做了同样的事情,我认为 - 遗憾的是,它们都没有使Firefox正常运行)
奇怪的是,在我做出此更改后, Chrome 停止了对更改的验证,并且只会对模糊进行验证。这是我改变的唯一代码行 - 我已经将其切换回来,Chrome再次正常运行。 为什么会发生?验证方法的内部在被调用时会如何影响?
希望这个问题有道理 - 如果有任何其他信息有用,请告诉我!对于调试这个问题,任何智慧的话都将非常感激。非常感谢任何建议!
答案 0 :(得分:1)
你正在使用jQuery Validate插件......
引用OP :
“每当其中一个人更改其价值时我想验证
<select>
。我接着激活了这个:”
$(".myClass").validate({
onchange: true,
});
1)您无法将.validate()
附加到任何单个输入元素。 .validate()
方法只能附加到<form>
元素 ...
$('#myForm').validate({
// options, rules, etc.
});
2)没有名为onchange
的插件选项。您只能使用the options that were created by the developer specifically for this plugin。
如果您想根据select
元素添加和删除规则,请使用the .rules('add')
and .rules('remove')
methods。
$('#myselect').on('change', function() {
$('#myInput').rules('add', { // add rule(s) to #myInput
required: true
});
});
如果您想要“验证”或测试某些内容的有效性,use the .valid()
method。
$('#myselect').on('change', function() {
$('#myInput').valid(); // trigger a test of #myInput
});