Jquery 검증은 최근 프로젝트에서 검증을 위해 사용되었습니다. 부트스트랩과 jquery 형식을 결합하는 것이 좋습니다. 하지만 원격검증의 캐시 문제로 인해 오랫동안 골치 아픈 일이 있었고, 이 플러그인을 포기할 뻔했습니다.
예:
기존 학교, 학년, 학급 개체
같은 학교는 같은 학년이 될 수 없고, 같은 학년은 같은 반이 될 수 없습니다
동일한 학년이 나올 수 없는 학교를 예로 들어 인증 시:
JS
"gradeId" : {
required : true,
min : 0,
remote: {
url: "gradeManager -checkGrade.action",
유형: "post",
dataType: "json",
data: {
'gradeId' : function() {
return $(" #gradeId ").val();
},
'schoolId' : function() {
return $("#schoolId").val();
}
}
}
}
HTML
div class="controls">
listValue="schoolName" headerKey="-1" headerValue="선택하세요. 학교">
< ;label class=" control-label" for="gradeId">grade
listValue="gradeName" headerKey="-1" headerValue="성적을 선택하세요">
< ;/div>
현재 시험학교 1과 시험학교 2가 있습니다. 그 중 시험학교 1은 1학년과 2학년으로 구성되어 있습니다.
이론적으로는 , In grade를 추가한 후 학교에서 1학년을 시험하기로 선택한 경우, 초등학교 1학년 또는 2학년을 선택할 때 원격검증에서 "이 학년은 이미 존재합니다."라는 오류가 보고됩니다.
실제로 , 처음 실행 시에도 결과가 정확합니다.
그러나 이때 학교를 변경하는 경우 예를 들어 캐시 문제로 인해 테스트 학교 2를 선택하면 유효성 검사 플러그인이 작동합니다. 새로운 원격 검증을 다시 수행하지 않고 마지막 검증 결과를 직접 반환하므로 다음과 같은 뼈아픈 오류가 있습니다
이것은 가장 받아들이기 어려운 문제가 아닙니다. 는 먼저 시험학교 2를 선택하고 초등학교 1학년을 선택하면 원격검증이 통과됩니다. 이때 시험학교 1을 선택해도 동일한 학년의 검증이 없으면 원격검증이 통과됩니다. 같은 학교, 실패 의미
그래서 다양한 쿼리 솔루션을 진행했습니다
원격에 "cache:false"를 추가했다는 말이 있는데, 실제 테스트에서는 해결되지 않았습니다. 문제
gradeId 값을 지우기 위해 학교 드롭다운 상자에 onchange 이벤트를 바인딩하려고 시도했지만 여전히 문제가 해결되지 않았습니다
유효성 검사 API를 확인한 결과 . valid() 메소드는 능동적으로 검증을 실행할 수 있습니다. 그러나 캐싱 문제로 인해 리모컨이 여전히 재검증을 하지 못했습니다.
또한 검증 소스 코드를 확인해보니 이전 값이 있는 것으로 나타났습니다. 값이 있으면 이전 검증 결과를 바로 반환합니다
그래서 값을 삭제해 보았습니다
$("#schoolId").change(function(){
$("#gradeId").removeData("previousValue ");
});
문제가 성공적으로 해결되었습니다.