2012-09-29 123 views
1

我有一個帶有SELECT字段(college_id)的表單,我試圖驗證它。 我正在使用JQuery驗證插件並嘗試使用它的「遠程」選項。Jquery驗證插件,使用自定義錯誤消息進行遠程驗證

HTML:

<form id="registration-form" ... > 
. 
. 
<select name="college_id" id="college_id" class="required" > 
//Options generated using PHP code 
</select> 
. 
. 
</form> 

JAVASCRIPT:

$(document).ready(function(){ 
    //For triggering the validation onChange 
    $('#college_id').change(function(){ 
     $("#college_id").removeData("previousValue"); 
     $("#registration-form").validate().element("#college_id"); 
    }); 

    $('#registration-form').validate({ 
     rules:{ 
      college_id:{ 
       remote: { 
        type: 'POST', 
        url: urls.base_url+'Representative/checkCollegeAJAX/', 
        dataType:"json", 
        data:{ 
         college_id:function(){ 
          return $('#college_id').val(); 
         } 
        }, 
        dataFilter: function(data) { 
         data=JSON.parse(data); 
         console.log(data.isError); 
         if(!data.isError) { //If no error 
          return true; 
         } else { 
          console.log("Error Message: "+data.errorMessage); 
          return "\"" + data.errorMessage + "\""; 
         } 

        } 
       } 
      } 
     } 
    }); 


}); 

正如你可以在上面看到,我試圖顯示錯誤消息時ISERROR ==真

我的PHP代碼返回JSON編碼對象,如:

{"isError":true,"errorMessage":"Sorry!"} 

在錯誤 或

{"isError":false,"errorMessage":""} 

的情況下,在沒有錯誤的情況。 (從火蟲問題提取)

問題是,無論響應如何,我一直在SELECT字段旁邊出現「Fix this field」。 只有在出現錯誤的情況下,我需要顯示我的自定義消息(data.errorMessage)。

+0

我相信用自己的js代碼將是一個更好的解決方案,讓我知道如果你有興趣,我將張貼一些例子,展示如何驗證輸入框,選擇框,純jQuery的單選按鈕 –

+0

感謝您的評論。我最終編寫了自己的JS代碼進行驗證。我只希望這可以在JQuery驗證中實現,因爲它更清晰。 –

+0

yeah插件總是乾淨的,但有時理解和編輯其他代碼是很痛苦的......也可以從你編寫的代碼創建插件,並且可以稍後參考它 –

回答

1

我剛纔遇到了這個問題,並且解決方案以JSON的形式返回了您想要顯示爲錯誤的字符串。在你的PHP /無論Ajax調用

echo json_encode(true); 

所以,如果一切都很好,只是返回true。

相反,如果你要顯示一個錯誤,將字符串的答案裏面:

echo json_encode("hey, we got something wrong here.."); 

如果您需要本地化的錯誤消息,你不能這樣做,通過你的控制器只是把它傳遞當你調用遠程方法:

data: { 
    ajax: true, 
    id: function() { 
     return $("#cid").val(); 
    }, 
    errormsg: "ERROR MSG WITH LOCALE" 
}, 

我希望這會幫助別人:)