2014-04-23 89 views
0

使用jQuery Validation Plugin,是否有方法使用$.validator.addMethod創建自定義規則,該規則利用了remote功能?如何創建使用遠程方法的自定義規則?

我曾嘗試下面的代碼:

$.validator.addMethod("custom-remote", function (value, element, param) { 
    if (this.optional(element)) { 
     return true; 
    } 

    return $.validator.methods.remote.call(this, value, element, { 
     url: "/checkvalue", 
     type: "POST", 
     data: { 
      valueToCheck: value 
     } 
    }); 
}, jQuery.format("{0}")); 

其中僅如果更改焦點輸入遠程請求完成之前的作品。

我不想使用$.ajax()async: false,因爲在這種情況下可能會造成糟糕的用戶體驗。

+0

如果你不能只用'remote'規則,需要一個自定義的方法,那麼你不需要'remote'可言。只需在自定義方法中使用'.ajax()'。 – Sparky

+0

另外,你爲什麼要這麼做呢?我的自定義方法中沒有看到默認的'remote'方法本身不具備的功能。你的代碼只不過是它本身的一個方法。按照它的設計使用'remote'規則。 – Sparky

+0

@Sparky我的印象是'addMethod'必須馬上返回,這意味着您需要使用'async:false'來處理ajax請求,我不想這樣做,因爲這可能會導致糟糕的用戶體驗。至於爲什麼,這是一個簡單的例子來顯示我想要做什麼。此外,我還有一些其他自定義驗證'addMethod'調用不使用遠程,我想保持一致。 –

回答

0

如果您想要修改規則的版本,那麼您將使用.addmethod()方法從頭開始創建新規則。換句話說,你會不是在你的新方法中調用舊的方法;相反,你會完全替換舊的方法。

由於remote規則使用.ajax(),因此您可以編寫自定義版本remote以使用.ajax()


報價OP:

「我的印象是,addMethod不得不馬上這意味着你需要使用async: false與我不想Ajax請求返回做」

這聽起來像是一個經典案例‘XY問題’:https://meta.stackexchange.com/a/66378/157574

如果您只希望remote使用async: true,或者只是更改.ajax()選項,那麼可以在不寫一個全新的方法的情況下完成。任何.ajax()選項可以很容易地與現有的remote方法一起使用。

文檔:http://jqueryvalidation.org/remote-method/

「你將提供覆蓋默認的任何選項。」

$("#myform").validate({ 
    rules: { 
    email: { 
     required: true, 
     email: true, 
     remote: { 
     // change the options in here 
     url: "check-email.php", 
     type: "post", 
     async: true, // <- YOUR OPTION(s) 
     data: { 
      username: function() { 
      return $("#username").val(); 
      } 
     } 
     } 
    } 
    } 
}); 
+0

什麼應該「check-email.php」返回失敗或通過字段驗證? – temuri

+0

@temuri,根據文檔,如果它回聲'真實'它通過。 Echo未定義,null或「false」,並且驗證失敗。迴應JSON編碼的字符串,然後驗證失敗,併成爲錯誤消息。 – Sparky

相關問題