2010-10-11 46 views
0

我想使用JQuery驗證插件,我能弄清楚如何在靜態字段上使用它。Jquery自定義驗證插件動態表單上的AddMethod

我的問題是如何在我的動態表單上使用它。我創造了一個小提琴來討論我的問題。希望你能耐心閱讀。小提琴的鏈接是here

現在,這是我想要做的,驗證每個文本框中輸入的機器ID,並確保它是唯一的。假設你輸入兩次ABCD-123,系統應該提醒你它不是唯一的。

希望有人能幫我一把。謝謝

+0

FYI中的jsfiddle如果你把JS代碼在JavaScript標籤盒這是不錯的了。 [現在看它] – naugtur 2010-10-11 08:04:19

+0

首先,它看起來像缺少輸入中的'machineID'類。然後,您應該在表單中查找輸入 - 您的循環包含隱藏的模板。我現在面臨的唯一問題是,當您修復其他重複(而不是首先導致驗證的重複)時,腳本不會重新驗證。儘快更新。 – 2010-10-11 08:32:15

回答

1

首先 - 在編寫代碼時在代碼中添加註釋。

的錯誤是在這裏:

var arrElements = $(".machineID"); 

arrElements總是空的,沒有與machineID

沒有元素,你的每一個不起作用。我重構了它http://jsfiddle.net/PaTJ4/

您的代碼可以使用一些更多的修復程序,這對於該任務來說有點太複雜。但現在它起作用了。

好運

+0

優秀的職位..對不起,我只是輸入一切,所以我忘了發表評論。儘管我仍然有一個查詢,但是在我看到的每個addmethod方法中,我總是會看到這條線this.optional(element)。這條線是什麼意思?我只是添加它認爲它始終是必需的。 – 2010-10-11 08:56:45

+0

@Mark這是驗證插件的一部分,我猜想。它會檢查該字段是否設置爲可選,以便它不驗證可選字段。你不需要這個我想。但我從來沒有使用驗證插件 – naugtur 2010-10-11 09:06:10

0

我對你的版本改進 - 在檢測到重複時,在重複場的任何一個應該被標記爲無效,並應能爲了解決這個問題而改變。因此,您需要每次重新驗證所有其他字段(使用validator.element()),但避免遞歸(使用validator.validatingOthers)。

我會在這裏張貼checkMachineIDs代碼的完整性:

function checkMachineIDs(element){ 
     if($(element).val() != ""){ 
      var arrElements = $("#machineList .machineID"); 
      var $element = $(element); 
      var validator = $($element[0].form).validate(); 
      if(arrElements.length > 1){ 
       var valid = true; 
       arrElements.not('#'+$element.attr('id')).each(function() { 
        var current = $(this); 
        if (current.val() == $element.val()) 
        valid = false; 
       }); 
       if (!validator.validatingOthers) { 
        validator.validatingOthers = true; 
        arrElements.not('#'+$element.attr('id')).each(function() { 
         validator.element(this); 
        }); 
        if (valid) validator.element($element); 
        validator.validatingOthers = false; 
       } 
       return valid; 
      }else{ 
       return true; 
      } 
     }else{ 
      return true; 
     } 
    }