그래서 나는 하하를 알지 못하고 밤에 잠을 잘 수없는 사람이기 때문에 이것이 왜 작동하지 않는지 조금 더 자세히 살펴볼 것입니다. 2013 년 1 월 29 일에 게시 된 jQuery validate 1.10 및 Microsoft jQuery Unobtrusive Validation 2.0.20710.0을 사용하고 있습니다.
jQuery Validate에서 setDefaults 메소드를 검색하여 시작하여 축소되지 않은 파일의 261 행에서 찾았습니다. 이 기능은 json 설정에 $.validator.defaults
정의 된 다른 기본값과 함께 ignore 속성이 ": hidden"으로 설정되어 초기화 된 기존 설정으로 json 설정을 병합하는 것 입니다. 따라서이 시점에서 무시했습니다. 이제이 defaults 속성이 어디에서 참조되는지 봅시다.
코드를 추적하여 참조되는 곳을봤을 때 $.validator.defaults
. jQuery의 170 행에서 양식 유효성 검사기의 생성자만이 축소되지 않은 파일의 유효성을 검사하는 것으로 나타났습니다.
// constructor for validator
$.validator = function( options, form ) {
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
이때 유효성 검사기는 설정된 모든 기본 설정을 병합하여 양식 유효성 검사기에 연결합니다. 유효성 검사, 강조 표시, 강조 표시 해제 등을 수행하는 코드를 보면 모두 validator.settings 객체를 사용하여 ignore 속성을 가져옵니다. 따라서 setDefaults 메소드로 ignore를 설정해야한다면 $ ( "form"). validate ()가 호출되기 전에 발생해야합니다.
Asp.net MVC와 눈에 거슬리지 않는 플러그인을 사용하는 경우 document.ready에서 validate가 호출되는 자바 스크립트를 살펴본 후 알 수 있습니다. 또한 스크립트 이후에 실행되는 document.ready 블록에서 setDefaults를 호출했는데 jquery validate 및 unobtrusive가 있습니다. 따라서 내 전화는 분명히 검증 중에 숨겨진 요소를 건너 뛰는 기본 기능에 영향을 미치지 않았습니다. 여기 몇 가지 옵션이 있습니다.
옵션 1 -Juan Mellado가 지적한 것처럼 document.ready 외부에서 호출하면 스크립트가로드되는 즉시 실행될 수 있습니다. 브라우저가 이제 병렬 스크립트 로딩을 수행 할 수 있기 때문에이 시점에 대해서는 확실하지 않습니다. 내가 너무 조심 스러우면 저를 정정하십시오. 또한이 문제를 해결할 수있는 방법이 있지만 내 요구에 따라이 길을 가지 않았습니다.
옵션 2a – 내 눈에 안전한 배팅 $.validator.setDefaults({ ignore: '' });
은 document.ready 이벤트 의 내부를로 바꾸는 것 입니다 $("form").data("validator").settings.ignore = "";
. 지정된 양식에 대해 요소에서 각 유효성 검사를 수행 할 때 jQuery validate에서 실제로 사용하는 ignore 속성을 수정합니다.
옵션 2b- 코드를 조금 더 살펴보면 $("form").validate().settings.ignore = "";
ignore 속성을 설정하는 방법으로 사용할 수도 있습니다 . 그 이유는 validate 함수를 볼 때 $.data()
함수 를 통해 폼 요소에 대해 유효성 검사기 객체가 이미 저장되어 있는지 확인하기 때문 입니다. 양식 요소와 함께 저장된 유효성 검사기 개체를 찾으면 다른 유효성 검사기 개체를 만드는 대신 유효성 검사기 개체를 반환합니다.