我有我的ASP MVC項目和jQuery客戶端驗證的一個問題。 問題是,當按下提交按鈕時,表單被驗證,但錯誤沒有顯示,表單被提交。 只有在驗證方法中調用valid()時纔會出現問題。 例如:我有一個isdatebefore和isdate之後的驗證方法。 我想檢查#start是否在#end之前。 因此,驗證#start時,它也會在#end上進行驗證,以確保錯誤消息在兩個元素上都顯示/消失。 我添加了驗證onfocusout,這工作得很好(在#start和#ejnd字段和表單中的所有其他字段)。 但是,當我按下提交按鈕,表單被驗證(我放置了一些斷點,以查看方法是否被調用),但提交,雖然存在錯誤。ASP MVC jQuery驗證onfocusout在工作,但不能在表單提交
這裏是我的代碼:
// Add IsDateAfter validation
$.validator.addMethod("isdateafter", function (value, element, params) {
var self = $(element);
var parts = element.name.split(".");
var prefix = "";
for (var i = 0; i < parts.length - 1; i++)
prefix = parts[i] + ".";
var otherElement = $('input[name="' + prefix + params.propertytested + '"]');
var startdatevalue = otherElement.val();
if (!value || !startdatevalue)
return true;
var allowequal = params.allowequaldates.toLowerCase() === "true";
var start = Globalize.parseDate(startdatevalue);
var end = Globalize.parseDate(value);
if (!self.data('reval')) {
self.data('reval', true);
otherElement.data('reval', true);
otherElement.valid();
self.data('reval', false);
otherElement.data('reval', false);
}
var isValid = allowequal ? start <= end :
start < end;
if (isValid) {
self.removeClass('input-validation-error');
}
return isValid;
});
$.validator.unobtrusive.adapters.add(
'isdateafter', ['propertytested', 'allowequaldates'], function (options) {
options.rules['isdateafter'] = options.params;
options.messages['isdateafter'] = options.message;
});
// Add IsDateBefore validation
$.validator.addMethod("isdatebefore", function (value, element, params) {
var self = $(element);
var parts = element.name.split(".");
var prefix = "";
for (var i = 0; i < parts.length - 1; i++)
prefix = parts[i] + ".";
var otherElement = $('input[name="' + prefix + params.propertytested + '"]');
var startdatevalue = otherElement.val();
if (!value || !startdatevalue)
return true;
var allowequal = params.allowequaldates.toLowerCase() === "true";
var start = Globalize.parseDate(startdatevalue);
var end = Globalize.parseDate(value);
if (!self.data('reval')) {
self.data('reval', true);
otherElement.data('reval', true);
otherElement.valid();
self.data('reval', false);
otherElement.data('reval', false);
}
var isValid = allowequal ? start >= end :
start > end;
if (isValid) {
$(element).removeClass('input-validation-error');
}
return isValid;
});
$.validator.unobtrusive.adapters.add(
'isdatebefore', ['propertytested', 'allowequaldates'], function (options) {
options.rules['isdatebefore'] = options.params;
options.messages['isdatebefore'] = options.message;
});
代碼工作正常與onfocusout在事件,但有問題文稱爲onsubmit事件裏。 當我刪除調用otherElement.valid();一切工作再次(但我需要驗證其他元素,使其正常工作)。
所以沒有任何人知道我可以保持一個驗證時驗證這兩個元素仍然有它不提交搞砸了?
如何提交表單?使用 – chiapa 2014-11-06 11:16:52
一個簡單的按鈕:<按鈕類型= 「提交」>保存 – wertzui 2014-11-06 11:28:19
您是否嘗試過'<按鈕類型= 「提交」 的onclick = 「返回validateForm()」>保存'?在'validateForm()'函數中,你可以檢查表單的有效性 – chiapa 2014-11-06 11:52:37