2013-11-09 50 views
0

我想一個字符串是否在服務器上使用jqueryvalidation.org plugin.jQuery驗證遺漏的類型錯誤時應用自定義消息到遠程驗證

這裏已經存在遠程驗證是我的jQuery代碼:

$("#title").rules("add", { 
    "remote": { 
     url: checkTitleAvailable.php, // echoes "true" or "false" 
     type: "post", 
     data: { 
      proposedSeoTitle:function() { 
       return $('#title').val(); 
      } 
     }, 
     complete: function(response) { 
      if (response.responseText != "true" && response.responseText != "false") { 
       alert("unexpected response " + response.responseText); 
      } 
      return response; 
     } 
    }, 
    "messages": {"remote": "That title already exists"} 
}); 

('title'是輸入字段,id =「title」class =「required」)

我收到一個錯誤:

"Uncaught TypeError: Cannot call method 'call' of undefined".

"messages"被視爲另一個規則,但沒有運行的功能。但它仍然被視爲一種信息,並且在應該時會彈出,但是錯誤會導致整個系統無法使用 - 在保存之前無法驗證整個頁面。

我做錯了什麼,或者這是驗證插件中的錯誤?有一些解決方法嗎?我應該尋找破解插件來讓它工作嗎?

+1

也請閱讀我的答案在這裏:http://stackoverflow.com/questions/19855214/jquery-remote-validation-doesnt-block-form-submit – Sparky

+0

嗨波西,你的其他答案肯定給了我一些進一步的線索追逐下來,但我還沒有設法得到它的工作。我仍然認爲插件中有一個錯誤,但我希望我錯了。服務器端調用可以回顯最終成爲自定義消息的東西似乎非常簡潔。期待看到你的迴應,同時如果我得到它的工作,我會發布我的答案。我還應該提及,我有額外的數據需要傳遞(所以只是默認爲字段的val不是我的選擇)。爲了清楚起見,我把它留下了。 –

+0

這是一個非常流行的插件,所以如果你認爲有bug,那麼在github上檢查。同時,我對此表示懷疑。你使用的是最新版本的插件嗎?過去發現的任何錯誤只能通過更新插件來解決。 – Sparky

回答

1

報價OP:

'title' is an input field with id="title" class="required"

即使你使用的.rules('add')方法在球場上宣佈你的規則,該插件還強制要求每一個輸入字段有(獨特name屬性。這是插件如何跟蹤輸入。

標記建議的Reference Docs page節...

The name attribute is 'required' for input elements, the validation plugin doesn't work without it.


您的代碼:

"remote": { 
    url: checkTitleAvailable.php, // echoes "true" or "false" 
    type: "post", 
    data: { 
     proposedSeoTitle:function() { 
      return $('#title').val(); 
     } 
    }, 
    complete: function(response) { 
     if (response.responseText != "true" && response.responseText != "false") { 
      alert("unexpected response " + response.responseText); 
     } 
     return response; 
    } 
} 

我真的不知道你想做什麼與complete回調在這裏。插件的remote規則會自動評估來自服務器的響應,但您還在評估響應是否爲布爾值並返回響應。

As per the documentationremote方法正在尋找true驗證字段。或者,當服務器響應是falseundefined,null或字符串時,它會被評估爲無效字段,其中字符串本身會覆蓋默認錯誤消息。鑑於該插件已經評估了服務器響應,您將永遠不需要使用回調來手動評估響應。否則,你不妨從頭開始編寫自己的remote方法,而不是使用插件中的方法。

The serverside resource is called via jQuery.ajax (XMLHttpRequest) and gets a key/value pair corresponding to the name of the validated element and its value as a GET parameter. The response is evaluated as JSON and must be true for valid elements, and can be any false , undefined or null for invalid elements, using the default message; or a string, eg. "That name is already taken, try peter123 instead" to display as the error message.

刪除您的complete回調,看看會發生什麼。

remote: { // <-- quotation marks not required. 
    url: checkTitleAvailable.php, // echoes "true" or "false" 
    type: "post", 
    data: { 
     proposedSeoTitle:function() { 
      return $('#title').val(); 
     } 
    } 
}, 
messages: { // <-- quotation marks not required. 
    // quotation marks not required around `remote`. 
    remote: "That title already exists" 
} 

BTW - 圍繞rulesmessages和其他選項引號不是必需的。

+0

感謝您的回答,我很感激。不幸的是我仍然收到錯誤。在我有時間再次調查之前可能需要幾天的時間。如果需要,我會再問一個問題。 –