我有一個表單,我使用jQuery驗證插件在客戶端進行了驗證。爲簡潔起見,我創建了一個簡單的測試用例來顯示我的問題。該表單具有單個文本輸入字段和單個隱藏輸入字段。通過JavaScript更新輸入字段值後無法獲得驗證消息
<script>
function testThis() {
alert('value before: ' + $("#testhidden").val());
$("#testhidden").val("sometext");
alert('value after: ' + $("#testhidden").val());
}
</script>
<form name="testform" id="testform" method="post" action="">
Enter Text: <input type="text" id="testfield" title="test field is required" name="testfield" size="20" minlength="2" maxlength="10" required="required" />
<input type="hidden" id="testhidden" title="hidden field is required" name="testhidden" minlength="4" required="required" />
<p><input type="button" id="addvalue" name="addvalue" value="Add Value via JavaScript" onclick="testThis();" /></p>
<p><input type="submit" id="testbutton" name="testbutton" value="Submit Form" /></p>
</form>
驗證爲兩個字段是它們是必需的,必須具有一定的長度的;隱藏字段至少4個字符,文本字段至少2至10個字符。我的警告是隱藏的領域正在通過JavaScript更新後,窗體已加載到DOM。
我創建了a fiddle to demonstrate my problem。對於這個測試,我添加了一個按鈕來模擬我如何通過JavaScript修改隱藏的輸入值。要測試這樣做:
- 嘗試提交表單而不輸入任何文本。你應該得到2個驗證錯誤。
- 接下來在文本輸入框中輸入文本,輸入至少2個字符後,應該隱藏第一個驗證消息。
- 如果您嘗試提交此時仍然不會因爲隱藏的字段要求。
- 接下來點擊通過JavaScript添加值按鈕。我正在警惕價值觀的前後。在這一點上,一旦隱藏的字段有正確的數據,我希望驗證消息被隱藏,但事實並非如此。
- 此時表單將提交,因爲驗證條件已滿足,但錯誤消息仍顯示。
一旦隱藏字段包含適當的文本,我該如何獲得驗證消息以隱藏?
這裏是我使用上面的測試形式一起去了簡單的驗證電話:
$("#testform").validate({errorElement:"div",ignore:[]});
在它的事項,我使用jQuery 1.11.1和jQuery驗證1.12.0
情況更新
雖然Pointy的回答並不能解決問題,但我認爲他正在走向正確的道路。我需要一些方法來觸發器更新隱藏字段後觸發驗證。現在我有updated my fiddle通過添加第二個輸入文本字段。我也通過JavaScript更新這個輸入字段。當我通過JavaScript更新後在這個新字段上觸發blur()
事件時,它正確隱藏了驗證消息。然而,在隱藏字段上做同樣的事情仍然無效。它肯定與它是一個隱藏的領域有關......
我認爲你已經有了解決方案,我喜歡它,因爲它使用插件的內置功能。我知道我的用例似乎很奇怪,但正如我試圖在另一條評論中解釋的那樣,實際情況是用戶完成了更新隱藏字段的驗證碼。我需要與表單相同的驗證,以便在表單可以提交之前驗證CAPTCHA響應。希望這有助於解釋它。感謝您的有用答案! – 2014-09-05 15:27:09
@ Miguel-F,我明白了。不過,我希望您的CAPTCHA正在服務器上進行評估,因爲JavaScript很容易被用戶繞過和操縱。 – Sparky 2014-09-05 15:31:31
絕對是!我也在服務器上驗證。但是,如果沒有首先滿足驗證碼,提交表單(通過按回車鍵)似乎不正確。 – 2014-09-05 15:36:14