jQuery 유효성 검사-숨겨진 필드에 대한 유효성 검사 사용


186

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

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

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

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


"숨겨진 필드의 유효성 검사가 무시되었습니다"링크가 종료되었습니다.
Beepye

유효성 검사는 기본적으로와 함께 작동합니다 <input type="text" name="myfield" id="myfield" required="required" style="display: none;">. 설정을 변경하거나 특별한 작업을 수행 할 필요가 없었습니다.
squarecandy

답변:


329

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

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 대신이 답변을 참조하십시오.


26
다운 투표자는 나에게 건설적인 피드백을 줄 수 있습니다. 그렇지 않으면 대답은 완전히 독립적이며 적절하게 제공되며 코드 예제를 제공하며 플러그인 작성자에 따라 기술적으로 정확합니다.
Sparky

1
@StijnVanBael, 아니, 그건 거짓이야. 참조 : jsfiddle.net/F4w92/1 도가 내 두 번째 의견을 참조 jerick의 답변을 .
Sparky

4
잘 @Sparky 말했다. 다운 투표는 아마 일종의 복수 일 것입니다. 나는 같은 것을 만났습니다 ..
Omar

1
라이브러리가 HTTPS 대신 HTTP로로드되므로 JSFiddle이 더 이상 작동하지 않습니다. 업데이트 버전 : jsfiddle.net/F4w92/31
hotips

1
최신 버전을 사용하는 경우 작동하지 않으므로 아래로 투표하십시오. $ ( "form"). data ( "validator"). settings.ignore = ""; @ 제임스에서 다른 응답으로 울부 짖는 소리
마크 호머

73

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

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

2
기본 동작을 변경하지 않고 특정 상황에서 할 수 있다는 것을 의미하기 때문에 나는 이것을 좋아합니다.
Steve Owen

5
옵션을 변경하기 위해 .validate ()를 사용하는 것이 작동하지 않았기 때문에 이런 식으로해야했습니다.
Farinha

1
이것은 눈에 거슬리지 않는 유효성 검사에 대한 올바른 솔루션입니다. 다른 모든 솔루션을 시도했지만 눈에 거슬리지 않는 경우 사용할 수 있습니다. 눈에 거슬리지 않게 사용하는 경우 여기에 올바른 장소입니다.
Hakan Fıstık

Bootstrap Accordion과 함께 작동하는 눈에 띄지 않는 유효성 검사
에도이

이 형식으로 변경하면 양식의 유효성이 검사되지 않습니다. 나는 눈에 거슬리지 않는 .net 코어를 사용합니다
Peir

64

넣어주세요

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

내부가 아님$(document).ready


2
훌륭한 답변입니다. 문서에 대한 링크는 사람들이 배우기에 좋지만, 정답은 더 가치있는 imo입니다. 그는 OP가 올바른 길을 가고 있었지만 $ (document) 외부에 두는 것은 준비가되었습니다.
Kevin Zych 2012

3
@KevinZych, 분명히 $.validator.setDefaults()DOM 준비 처리기의 내부 또는 외부에 있는지 여부 는 전혀 차이 가 없습니다 . 비교 이 jsFiddle을이 jsFiddle .
Sparky

@Sparky에 관심이있는 바이올린은 훌륭한 증거입니다. 돌아가서이 솔루션을 사용하여 수정 한 코드를 살펴보고 DOM 준비 처리기 안에 있어야한다는 결론을 얻은 이유를 찾아야합니다. 다른 이유 였을 것입니다.
Kevin Zych

Justin은 doc ready 내에서 실행하면 왜 문제가 발생하는지 설명합니다. 그러나이 답변은 doc ready 외부에있는 문서가 doc ready 전에 실행되도록 보장하기 어렵 기 때문에 좋은 옵션이 아닙니다. Doc.ready는 외부 스크립트가 실행될 때까지 기다리지 않습니다. 개인적인 것은 없지만 신뢰할만한 답변이 아닙니다.
AaronLS

마지막으로 답이 있습니다. 대단히 감사합니다
sp9

29

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


자세한 답변 감사합니다!
davidallyoung

영업 답변으로 좋은 작품은 MVC 5 나를 위해 작동하지 않았다
마크 호머

귀하의 분석은 검증 문제를 해결하는 데 많은 도움이되었습니다. +1
pgcan

15

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

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

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

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


8

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

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


0

유효성 검사는 양식 제출에서 나를 위해 일하고 있었지만 선택한 선택 목록에 입력 할 때 반응 이벤트 기반 유효성 검사를 수행하지 않았습니다.

이 문제를 해결하기 위해 라이브러리에 의해 추가되는 jquery 유효성 검사 이벤트를 수동으로 트리거하기 위해 다음을 추가했습니다.

$(".chosen-select").each(function() {
  $(this).chosen().on("change", function() {
    $(this).parents(".form-group").find("select.form-control").trigger("focusout.validate");
  });
});

jquery.validate는 이제 .valid클래스를 기본 선택 목록에 추가합니다 .

주의 사항 : 양식 입력에 일관된 html 패턴이 필요합니다. 필자의 경우, 제출 된 각 입력은에 싸여 div.form-group있으며 각 입력에는가 있습니다 .form-control.


-15

jquery 유효성 검사 파일에서 텍스트 무시 : ": hidden" 을 찾아서 주석 처리하십시오. 주석 후에는 유효성을 검사하기 위해 숨겨진 요소가 손실되지 않습니다 ...

감사


5
타사 라이브러리에서 코드를 임의로 주석 처리하는 것은 좋은 생각이 아닙니다.
Jacques
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.