ASP MVC 프로젝트 및 jQuery 클라이언트 측 유효성 검증에 문제점이 있습니다. 문제는 제출 단추를 누를 때 양식의 유효성을 검사하지만 오류가 표시되지 않고 양식이 제출된다는 것입니다. 이 문제는 유효성 검사 메서드 내에서 valid()를 호출 할 때만 나타납니다. 예 : 확인 방법 이후에 isdatebefore 및 isdate가 있습니다. #end가 #end 전에 있는지 확인하고 싶습니다. #start의 유효성을 검사 할 때 #end에서 validate를 호출하여 두 요소에서 오류 메시지가 나타나거나 사라지는 지 확인합니다. 유효성 검사 onfocusout을 추가했는데 이것은 #start 및 #ejnd 필드와 양식의 다른 모든 필드에서 올바르게 작동합니다. 그러나 제출 버튼을 누르면 양식이 유효화됩니다 (메소드가 호출되는지 확인하기 위해 일부 중단 점 배치). 오류가 있지만 제출됩니다. 코드가 onfocusout 이벤트와 함께 잘 작동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;
});
하지만 원 총리는 태그의 onsubmit 이벤트 내에서 호출 문제가있다 :
여기 내 코드입니다. otherElement.valid()에 대한 호출을 제거 할 때; 모든 것이 다시 작동합니다 (그러나 올바르게 작동하려면 다른 요소의 유효성을 검사해야합니다).
그래서 아무도 내가 하나의 유효성을 검사 할 때 두 요소의 유효성을 검사 할 수있는 방법을 알고 있고 여전히 제출에 실패하지 않았습니까?
양식을 어떻게 제출합니까? – chiapa
간단한 버튼 사용 : – wertzui
'을 사용해 보셨습니까? 'validateForm()'함수에서 폼의 유효성을 확인할 수 있습니다. – chiapa