JQuery更改在浏览器中的行为不一致

时间:2013-12-11 00:23:43

标签: javascript jquery google-chrome firefox jquery-validate

我是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再次正常运行。 为什么会发生?验证方法的内部在被调用时会如何影响?

希望这个问题有道理 - 如果有任何其他信息有用,请告诉我!对于调试这个问题,任何智慧的话都将非常感激。非常感谢任何建议!

1 个答案:

答案 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
});