驗證後,提交處理程序不運行。它之前運行。試試看:
$('form').submit(function() {
alert('validation hasn\'t run yet at this point => see there is no red color over your form input fields yet');
if ($(this).valid()) {
alert('the form is valid');
} else {
alert('the form is not valid');
}
});
UPDATE:
修訂後的問題,我仍然無法重現該問題。這裏是我的模型:
public class MyModel
{
[Required]
public string Name { get; set; }
}
這是我的觀點:
@model MyModel
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm(null, null, FormMethod.Post, new { }))
{
@Html.EditorFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
<input type="submit" value="OK" />
}
<script type="text/javascript">
$('form').submit(function() {
$('#Name').val('some value');
});
</script>
現在,如果我離開名稱字段爲空並提交表單,新的值被正確地分配和表單成功提交服務器沒有任何錯誤。如果我刪除$('#Name').val('some value');
行來分配一個新值並嘗試提交帶有空字段客戶端驗證觸發器的表單並且未提交該表單。
我解決了這個問題。我有一個jQuery文檔就緒處理程序中的提交處理程序。一旦我刪除它,我可以根據需要在提交之前操作表單提交。 – Mark
對於上面評論感到困惑的其他人:您需要將提交處理程序移出文檔就緒處理程序,並將其放在窗體的正下方。 – Stijn