jQuery 유효성 검사-숨겨진 필드에 대한 유효성 검사 사용 필드의 유효성 검사가 무시 됩니다.

jQuery 유효성 검사 플러그인 1.9의 새 버전에서는 기본적 으로 숨겨진 필드의 유효성 검사가 무시 됩니다. 텍스트 영역 입력 필드에 CKEditor를 사용하고 있으며 필드를 숨기고 iframe으로 바꿉니다. 필드가 있지만 숨겨진 필드에 대해서는 유효성 검증이 사용 불가능합니다. 유효성 검사 플러그인 버전 1.8.1을 사용하면 모든 것이 예상대로 작동합니다.

그래서 내 질문은 v1.9 유효성 검사 플러그인으로 숨겨진 필드에 대한 유효성 검사를 활성화하는 방법입니다.

이 설정이 작동하지 않습니다 :

$.validator.setDefaults({ ignore: '' });


답변

플러그인 작성자는 “따옴표없이 대괄호” 를 사용해야한다고 말합니다 .[]

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

릴리스 : Validation Plugin 1.9.0 :
“… 다른 변경으로 인해 숨겨진 요소가있는 양식의 설정이 더 쉬워졌습니다. 이제 기본적으로 무시됩니다 (“ignore “옵션은 기본적으로”: hidden “옵션이 있습니다). 실제로 발생하지 않을 경우 ignore-option을 “[]”(따옴표없이 대괄호)로 설정하여 문제를 해결할 수 있습니다.

모든 양식에 대해이 설정을 변경하려면

$.validator.setDefaults({
    ignore: [],
    // any other default options and/or rules
});

( 기능 .setDefaults()내에있을 필요는 없습니다 document.ready)

또는 하나의 특정 형태의 경우 :

$(document).ready(function() {

    $('#myform').validate({
        ignore: [],
        // any other options and/or rules
    });

});

편집 :

일부 숨겨진 필드에서 유효성 검사를 활성화하지만 다른 필드는 무시하는 방법 은 이 답변 을 참조하십시오 .


편집 2 :

“이 작동하지 않습니다”라는 의견을 남기기 전에 OP는 단순히 jQuery Validate 플러그인 에 대해 묻고 있으며 ASP.NET, MVC 또는 기타 Microsoft 프레임 워크가이 플러그인의 표준을 변경하는 방법과 는 아무런 관련없습니다. 예상되는 행동. Microsoft 프레임 워크를 사용하는 경우 jQuery Validate 플러그인의 기본 기능은 Microsoft unobtrusive-validation플러그인 으로 덮어 씁니다.

unobtrusive-validation플러그인으로 어려움을 겪고 있다면 https://stackoverflow.com/a/11053251/594235 대신이 답변을 참조하십시오.


답변

이것은 ASP.NET MVC3 사이트 내에서 누군가에게 유용 할 때를 위해 눈에 거슬리지 않는 유효성 검사 등을 설정하기 위해 프레임 워크를 남겼습니다.

$("form").data("validator").settings.ignore = "";

답변

넣어주세요

 $.validator.setDefaults({ ignore: '' });

내부가 아님$(document).ready


답변

그래서 나는 하하를 알지 못하고 밤에 잠을 잘 수없는 사람이기 때문에 이것이 왜 작동하지 않는지 조금 더 자세히 살펴볼 것입니다. 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()함수 를 통해 폼 요소에 대해 유효성 검사기 객체가 이미 저장되어 있는지 확인하기 때문 입니다. 양식 요소와 함께 저장된 유효성 검사기 개체를 찾으면 다른 유효성 검사기 개체를 만드는 대신 유효성 검사기 개체를 반환합니다.


답변

이것은 ASP.NET 사이트 내에서 나를 위해 일했습니다. 일부 숨겨진 필드에서 유효성을 검사하려면이 코드를 사용하십시오.

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

양식의 모든 요소에 대한 유효성 검증을 사용하려면 다음을 사용하십시오.
$("form").data("validator").settings.ignore = "";

내에서 사용하십시오 $(document).ready(function() { })


답변

ignore: []특정 양식의 특정 페이지에 추가 된이 솔루션은 저에게 효과적이었습니다.

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {
        },
        highlight:false,
    });

답변

이것은 나를 위해 일하고 있습니다.

jQuery("#form_name").validate().settings.ignore = "";