2012-08-09 25 views
0

我有一個網頁,其唯一的輸入是一個PO。他們必須輸入採購訂單,並且必須包含字母,數字,短劃線,下劃線和/或句點,並且長度必須在2到15個字符之間。我相信我擁有所有與我繼承的代碼(我是jQuery新手)一起工作。jQuery驗證 - 標準要求但也是一個警告

但是,如果所有這些測試都通過了,我還需要對我們的數據庫進行遠程測試,看看用戶的公司是否已經使用了該PO。如果他們有,我需要警告他們,讓他們選擇輸入不同的值或提交輸入的值。這是我卡住的地方。

$(document).ready(function(){ 
$.validator.addMethod("noSpecialChars", function(value, element) { 
    return this.optional(element) || /^[a-zA-Z0-9-_.]+$/i.test(value); 
}, "Ignored"); 

jQuery.validator.messages.required = ""; 
$("#form1").validate({ 
    invalidHandler: function(e, validator) { 
     var errors = validator.numberOfInvalids(); 

     if (errors) { 
      var message = errors == 1 
       ? 'PO must contain only letters, numbers, dashed, underscores or periods and must be between 2 and 15 characters long.' 
       : 'You missed ' + errors + ' fields. They have been highlighted below'; 
      $("div.productError span").html(message); 
      $("div.productError").show(); 
     } else { 
      $("div.productError").hide(); 
     } 
    }, 

    onkeyup: false, 
    submitHandler: function(form) { 
     $("div.productError").hide(); 
     form.submit(); 
    }, 

    rules: { 
     po_number: { 
      required: true, 
      noSpecialChars: true, 
      rangelength:[2,15] 
     } 
    }, 

    messages: { 
     po_number: { 
      required: 'blah', 
      noSpecialChars: 'blah', 
      rangelength: 'blah' 
     } 
    }, 
    debug:true 
}); 

});

回答

0

現在更清楚了。

考慮到您的意見並在文檔中稍微閱讀,我建議在.submitHandler表單上調用第二個驗證。

看看文檔,只有當表單實際上是有效的,也就是您的檢查返回true後,纔會調用該回調。然後,在提交表單之前,您可以執行另一次檢查,如果該表單也返回true,請提交表單。無論您需要對客戶說什麼,都可以彈出。

從DOC:

回調處理實際提交當表單有效。獲取表單作爲唯一的參數。 替換默認提交。經過驗證後,通過Ajax提交表單的正確位置。

第二個大膽的部分讓我對你的代碼有點懷疑......你似乎再次重新提交表單,因此將它傳遞給另一個驗證。也許我弄錯了那部分。如果是這樣,我表示歉意。

+0

我明白,我需要做一個遠程規則。我不明白的是,如何獲得驗證來運行執行所需邏輯的第一遍(我上面已經說過),如果通過,然後運行第二個(嵌套?)驗證來執行遠程測試,並且if它失敗(PO#已經存在),彈出一個框,警告它們重試或繼續的能力。問題是有一個子驗證(或其他)。 – 2012-08-09 17:00:46

+0

@ user1588106通知您我的答案已更改。我相信系統不會通知你。 – Kiruse 2012-08-10 01:56:13

0

如果您正在使用jQuery插件驗證,那麼你可以很容易地使用remote method這樣做

+0

也許是因爲我是jQuery的noob,但我該如何做所需的測試(現在它是這樣做的),如果它們都通過了,那麼那麼做一個有條件的遠程測試?除非所需的測試全部通過,否則我不希望遠程測試關閉。它有條件地解除了第二個子驗證,讓我撓了撓頭。 – 2012-08-09 18:46:47