2013-02-25 132 views
1

我正在使用jquery validate插件進行表單驗證。我看到有些取消功能很奇怪。我有一個電子郵件字段,提交按鈕和取消按鈕的表單。當我在電子郵件字段中鍵入不完整的地址,然後,如果不點擊頁面上的其他任何地方,單擊取消,驗證器將檢查電子郵件字段,在字段旁邊顯示無效消息並殺死取消操作。如何取消jquery驗證?

我在這裏找到一個相關的問題:jQuery Validation plugin: disable validation for specified submit buttons。它看起來完全像我所需要的。但它不起作用!我將「取消」css類添加到我的取消按鈕,但它沒有效果。

此示例代碼演示了我所看到的問題。我看到了FF和Chrome中的行爲。

在本示例中,當我在文本輸入中鍵入無效的電子郵件地址,然後在單擊其他任何內容之前單擊取消按鈕,驗證器在文本輸入旁邊顯示一條消息,並且不會出現取消操作。如果我再次單擊取消,頁面會按預期重新加載。這意味着要取消頁面,我必須點擊取消兩次。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#myForm").validate() 

     $(".cancel").click(function() { 
      location.reload(true) 
     }) 

    }) 
</script> 

<div> 
    <form name="myForm" id="myForm" action="index.html"> 
     <input type="text" class="required email" id="myField" name="myField"/> 
     <input type="submit" value="Submit"/> 
     <input type="submit" value="Cancel" class="cancel"/> 
    </form> 
</div> 

也很有趣:我試圖運行JQuery驗證文檔(http://docs.jquery.com/Plugins/Validation/Reference#Skipping_validation_on_submit)中發現的演示。當我運行演示時,我無法判斷驗證是否有效 - 即使輸入gobbledygook並單擊提交按鈕,電子郵件字段也不會被標記爲無效。我所得到的只是一個簡單的提醒,它已被添加到表單的submitHandler中。取消按鈕的行爲方式是相同的,所以我不知道添加取消類是否可行。

我正在FF和Chrome上運行這個。我使用的是jquery 1.9.1和jquery-validate 1.11.4。

+0

如果您使用'jquery.validate.unobtrusive'(ASP.NET MVC),您需要做更多的工作,因爲它與默認行爲相關。看到我的[其他答案](http://stackoverflow.com/a/17401660/16940)到類似的問題。 – 2013-07-01 10:06:24

+0

@schufty,你有沒有找到解決方案。我面臨同樣的問題 – cosset 2016-02-04 15:23:33

回答

6

As per the accepted answer on the question you reference,僅添加cancel類「取消」驗證。 As you can see in this demo,取消按鈕的行爲與另一個提交按鈕的行爲完全相同,只是驗證被繞過。請單擊取消按鈕時,請準確描述您希望看到的內容。

否則,也許這就是你想要什麼:http://jsfiddle.net/25XBT/

jQuery的

$(document).ready(function() { 

    var validate = $('#myform').validate({ 
     // your rules & options 
    }); 

    $('#cancel').on('click', function (e) { 
     e.preventDefault(); 
     validate.resetForm(); 
     $('form').get(0).reset(); 
    }); 

}); 

HTML

<form id="myform"> 
    <input type="text" name="myfield" /> 
    <input type="submit" /> 
    <input type="submit" id="cancel" class="cancel" value="cancel" /> 
</form> 

參見:http://docs.jquery.com/Plugins/Validation/Validator/resetForm

編輯class="cancel"已被棄用,以支持formnovalidate屬性。

<input type="submit" id="cancel" formnovalidate="formnovalidate" value="cancel" /> 
+0

我只看到你的小提琴和我的示例之間的一個主要區別:你在你的點擊處理程序中包含'e.preventDefault()'。然而,當我運行我的示例時,它甚至沒有在第一次點擊時進入點擊處理程序。所以我尋找其他的差異,結果是你的代碼和我的代碼之間的關鍵區別在於你在你的提琴中的提交和取消按鈕之間插入了一個** hard break **(出於某種原因,你沒有將它包含在你的回答)。當我在我的代碼中包含硬解決方案時,它會起作用!當我把它拿出來時,它又被打破了。我無法想象爲什麼這很重要。 – schufty 2013-02-25 19:07:28

+0

我已經更新了你的小提琴,以顯示當硬休息被刪除時會發生什麼。更新的小提琴在這裏:http://jsfiddle.net/47XV9/。請注意,您會得到我在原始問題中描述的確切行爲。 – schufty 2013-02-25 19:40:24

+0

@schufty,我將'
'從我的答案中刪除了,因爲它對這個JavaScript的功能應該是完全不相關的和多餘的。另外,我注意到我在我的回答中鏈接到的jsFiddle不是我打算鏈接到的正確的jsFiddle。我已經修復了我的鏈接。 – Sparky 2013-02-25 20:49:35