2013-12-11 58 views
0

我是JavaScript新手,我對繼承的一些JQuery.validate代碼有點問題。請原諒我,如果答案是顯而易見的:)JQuery變化在瀏覽器中表現不一致

我有以下的驗證方法聲明:

jQuery.validator.addMethod("myMethod", function(value, element, param) { 
    /*...*/ 
    if (document.getElementById("DOMID") { 
     /*...*/ 
    } 
    /*...*/ 
)}; 

本質的方法檢查某個DOM對象的存在,並將它設置一些不同的驗證參數,如果它確實存在。我想驗證的對象是一組包含在父代<div id="DOMID">中的<select>輸入,但有幾個不同的「DOMID」情況,每個情況都有稍微不同的驗證規則 - 因此在方法內部進行檢查。我想驗證<select>每次他們中的一個改變它們的值。然後,我有這樣的激活:

$(".myClass").validate({ 
    onchange: true, 
}); 

隨着myClass被應用到所有的<select>輸入我想驗證。

最後,我有這個登記:

jQuery.validator.addClassRules(
{ 
    myClass: 
    { 
     myMethod: true, 
    } 
} 

這只是正常的瀏覽器 - 每個更改的<select>選項之一時驗證應用。

但是,在Firefox中,情況並非如此 - 我發現我必須模糊select以便驗證激活。所以,這是一個問題:爲什麼Chrome和Firefox之間的變化行爲有所不同?或者情況並非如此,並且在我的代碼中還有其他的東西是導致這種不一致的原因嗎?

The second問題我有一些我覺得很奇特的東西。在嘗試修復的火狐沒有驗證,直到模糊的問題,我改變了我的JavaScript getElementByID...使用jQuery,而不是:

if ($("#DOMID").length > 0) { [...] 

(我也試過if ($("#DOMID").get(0)),但他們做同樣的事情,我想 - 不幸的是,作出Firefox的行爲正常)

奇怪的是,我做了這個改變後,Chrome停止驗證的變化,只會驗證模糊。這是我改變的唯一代碼行 - 我自此將其切換回來,並且Chrome再次正常運行。爲什麼發生?驗證方法的內部如何影響它的被調用時間?

希望這個問題有道理 - 請讓我知道,如果任何額外的信息會有所幫助!任何用於調試這個問題的智慧的話都會非常感激。非常感謝您的任何建議!

+0

顯示足夠的代碼來構造一個簡潔完整的演示代碼,其中包含相關的HTML標記,而不是顯示一點零碎。 – Sparky

回答

1

您正在使用jQuery驗證插件不當...

報價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 
}); 
+0

謝謝Sparky,這非常有幫助! – NWard