2013-03-12 37 views
1

我有一個問題後,我用我的復位形式:jQuery驗證表單後不工作復位

$(".cancel").click(function() { 
     validator.resetForm(); 
     $(':input', '#MyForm') 
      .not(':button, :submit, :reset, :hidden') 
      .val('') 
      .removeAttr('checked') 
      .removeAttr('selected'); 
     //OR 
     document.getElementById('MyForm').reset(); 
}); 

當我打再次保存,必填字段不再需要和形式的帖子後面。我怎樣才能讓表格重新驗證,即使重置?

這是一個簡單的例子,因爲我只是重新驗證和形式,但在其他頁面我必須手動操作某些領域,所以我需要重置形式合作的這種方式。

這是一個MVC創建的表單,如果有任何區別

有什麼建議嗎?

編輯:經過一些試驗和錯誤,似乎問題不應該與直接resetForm代碼,而是其他的東西。

在控制檯中我得到了以下JavaScript錯誤:

SyntaxError: invalid label 

,並警告

Use of attributes' specified attribute is deprecated. It always returns true. 

不知道,如果他們與我的問題,但不知道還有什麼在做這點。

至於腳本,我使用的是:

@Scripts.Render("~/bundles/modernizr") 
@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/Scripts/jquery-1.8.3.min.js") 
@*@Scripts.Render("~/Scripts/jquery-1.9.1.min.js")*@ 
@Scripts.Render("~/Scripts/jquery-ui-1.9.2.js") 
@Scripts.Render("~/Scripts/jquery.validate.js") 
@Scripts.Render("~/Scripts/jquery-validate-messages.js") 
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") 
@Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.js") 
@Scripts.Render("~/Scripts/jquery.jeditable.mini.js") 
@Scripts.Render("~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.editable.js") 
@Scripts.Render("~/Scripts/DataTables-1.9.4/extras/TableTools/media/js/TableTools.js") 
@Scripts.Render("~/Scripts/Countdown.js") 
@Styles.Render("~/Scripts/DataTables-1.9.4/media/css/jquery.dataTables.css") 
@RenderSection("scripts", required: false) 

1.9.1被註釋掉了,因爲它是第一個JQuery的電話打破。這是相關的嗎?

+0

你有沒有在這個頁面上運行的'$ .ajax'調用? – darshanags 2013-03-12 16:04:26

回答

1

找到一種方法來迫使它重新驗證關於提交:

$(".cancel").click(function() { 
     $('#FormId')[0].reset(); 
     validator.resetForm(); 
    }); 

    $("#submitForm").click(function() { 
     if ($("#FormId").valid()) { 
      $("#FormId").submit(); 
     } 
    }); 

現在我不再依賴表單的提交功能來觸發驗證,而是我自己觸發它。

1

嘗試通過重新設置驗證:

$j.validator.unobtrusive.parse('#MyForm'); 

編輯

你能嘗試用一個復位按鈕復位形式,把這個表單裏面:

<button class="reset-button" type="reset">Reset form</button> 

和禁用您的事件處理程序.cancel。或將其更改爲:

$('.cancel').click(function() { 
    $('.reset-button').click(); 
}); 

並隱藏重置按鈕如果您不想顯示它。

+0

我試過這個,但是現在它根本不驗證表單。我嘗試在jquery.validate之前和之後包括jquery.unobtrusive,但驗證不再存在。我會保持修補,但只是想在你忘記我之前得到它。) – DeiasR 2013-03-12 14:46:05

+0

剛剛嘗試隱藏的重置按鈕。它的工作原理是重置表單,但在重置後它仍然允許提交。 – DeiasR 2013-03-12 15:04:25

+0

控制檯中的任何javascript錯誤? – iappwebdev 2013-03-12 15:06:07

0

我不知道爲什麼你重置這樣的形式,但做工精細只是復位。 jQuery有一個本地復位

$(".cancel").click(function() { 
     $('#FormId')[0].reset(); 
    }); 

和驗證保持工作順利

+0

試過這樣,仍然沒有運氣。表格仍然允許在復位後提交 – DeiasR 2013-03-12 14:49:23

+0

表格仍然允許提交???但如果($('#FormId')。valid()){ } } – 2013-03-12 15:47:26

0

嘗試以下操作:

var validator = $("#FormId").validate(); 

$(".cancel").click(function() { 
    $('#FormId')[0].reset(); 
    validator.resetForm(); 
}); 

fiddle

+0

'之前應該使用.valid() ...有一個真正的希望,那一個= P – DeiasR 2013-03-12 14:52:38

+0

提交取消作品後爲我在小提琴。它不適合你? @DeiasR – darshanags 2013-03-12 14:56:11

+0

不,取消仍然允許重新提交。這是一個奇怪的問題,我不確定是什麼原因造成的。 – DeiasR 2013-03-12 15:05:22