2014-09-28 4 views
0

대 요구,jQuery.validator.addMethod 다음과 같은 코드를 선택

jQuery.validator.addMethod 
(
     "exactlength", 

     function(value, element, param) 
     { 
      return this.optional(element) || value.length == param; 
     }, 

     jQuery.format("Please enter exactly {0} characters.") 
); 

나는

  • value
  • element 입력 필드 자체를 참조하는 입력 필드의 값을 참조 이해
  • param은 규칙의 속성 값을 참조합니다.
  • value.length == param은 실제 검증

을 의미하지만 this.optional(element) ||가 필요한 필드에 포함 된 이유를 확실히 이해하지 않습니다. addMethod에 대해 본 대부분의 예제는이 절의 일부를 갖고있는 것처럼 보입니다. 그렇다면 required 인 경우에도 왜 강제적입니까? 둘째

,

email: 
{ 
    required: true, 
    email: true, 
}, 

내가 또한 다음을 추가, 내가 좋아하는 뭔가를 추가,이 전 이메일 유효성 검사를 원하는 가정

jQuery.validator.addMethod 
(
     "minLengthID", 

     function(value, element, param) 
     { 
      return this.optional(element) || value.length >= param; 
     }, 

     jQuery.format("Please enter more than {0} characters.") 
); 


jQuery.validator.addMethod 
(
     "maxLengthID", 

     function(value, element, param) 
     { 
      return this.optional(element) || value.length <= param; 
     }, 

     jQuery.format("Please enter less than {0} characters.") 
); 

을 할 수 있지만, this.optional(element) ||이 필요한 이유를 이해하지 않습니다 이리. 나는 어떤 방향으로도 감사 할 것이다.

답변

2

먼저 minlengthmaxlengthemail 규칙으로 완벽하게 작동합니다. 당신이 minlengthmaxlength 규칙이 평가 전에 email 규칙 을 충족해야한다는 점

$('#myform').validate({ 
    rules: { 
     emailaddress: { 
      required: true, 
      email: true, 
      minlength: 6, 
      maxlength: 30 
     } 
    } 
}); 

DEMO: http://jsfiddle.net/arex5q69/

그러나주의. 또한 매우 짧은 이메일 주소 [email protected]은 6 자 길이이므로 minlength: 6 규칙이 즉시 만족됩니다. 당신이 minlengthmaxlength 규칙을 세우면

반대로, email 규칙 전에, 그들은 먼저 평가됩니다. 이 규칙은 혼자 사용하는 경우 사용자 정의 규칙의 일환으로


this.optional(element) ||

DEMO 2: http://jsfiddle.net/arex5q69/1/

$('#myform').validate({ 
    rules: { 
     emailaddress: { 
      required: true, 
      minlength: 6, 
      maxlength: 30, 
      email: true 
     } 
    } 
}); 

단순히 당신의 분야를 선택합니다.

그러나 "선택 사항"사용자 정의 규칙을 required: true과 결합하면 필드가 선택 사항이 아니므로 문제가됩니다.

this.optional(element) ||을 사용자 지정 규칙에 넣는 이유는 사용자가 required 규칙을 사용하거나 사용하지 않는 필드에서 사용할 수 있기 때문입니다. 당신이 this.optional(element) ||을 떠날 경우 현장 required을하지 않을 수 있습니다 경우에도

그렇지 않으면, 사용자 정의 규칙은 항상 필드 required를 만들 것입니다.

+0

Sparky에게 감사드립니다. Nice가 설명했는데 '@'앞에 전자 메일 아이디가 최소 한도와 최대 한도 사이에 있도록하려면 어떻게해야합니까? – Grateful

+0

@Grateful,'@ '앞에 오는 이메일 주소의 부분 만 검사하는 표준 방법은 제공되지 않습니다. 길이를 검사하기 전에 'value'를 분리하는 맞춤 메소드를 작성해야합니다. 그러나 OP에서 요청한 것이 아니며 '... required vs optional'이라는 제목이 붙어 있습니다. – Sparky

+0

네 답을 고맙게 생각합니다. 또한 위의 질문은 원래 질문에 대한 후속 조치 인 것을 깨달았습니다 ... 스택 오버 플로우 규칙에 대한 것입니까? 아마도이 "두 번째 후속 조치"도 별도의 질문으로 요청해야합니다. – Grateful

관련 문제