업데이트 (아래에 코멘트에서). if
가 (A falsey 값) 호출자에게 반환되는 undefined
에 기술적으로 어떤 결과를 입력하지 않은 경우
당신은 사용자 정의 규칙에서 진정한 반환되지 않습니다.
$.validator.addMethod("regex", function(value, element, regexp) {
if ($('#receive_sms_updates').is(':checked')) {
var check = false;
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
}
return true;
}, "Mobile Required");
은 다른 사람에게 도움이 될 수 있기 때문에 주변이 부분을 떠나 : 다음과 같이 규칙을 업데이트
다음과 같이 나는 당신의 validate 호출 해와 규칙을 업데이트 :
$.validator.addMethod("regex", function(value, element, regexp) {
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
}, "Mobile Required");
$("form#patient-detials").validate({
rules: {
'patient[person_attributes][phone_mobile]': {
maxlength: 10,
minlength: 10,
digits: true,
regex: "^04[0-9]{8}",
required: "#receive_sms_updates:checked"
}
}
});
보시다시피, required
속성에는 모바일 필드가 필요한지 여부를 결정하는 데 사용되는 "종속성 표현식"이 사용됩니다 (#receive_sms_updates
이 선택되었는지 여부에 따라 다름). 여기
은 예입니다 :
http://jsfiddle.net/andrewwhitaker/ED6cX/
가 나는 규칙 자체에서 "모바일 필수"방법을 제거하는 것이 좋습니다, 단지 하나의 작은 단계 더 가져가 (당신은 재사용 가능한 정규식 규칙을 원하는 결국) 유효성 검사 호출의 messages
속성에 배치합니다. 같은 뭔가 :
$.validator.addMethod("regex", function(value, element, regexp) {
var re = new RegExp(regexp);
return this.optional(element) || re.test(value);
});
$("form#patient-detials").validate({
rules: {
'patient[person_attributes][phone_mobile]': {
maxlength: 10,
minlength: 10,
digits: true,
regex: "^04[0-9]{8}",
required: "#receive_sms_updates:checked"
}
},
messages: {
'patient[person_attributes][phone_mobile]': {
required: "Mobile Required",
regex: "Please enter a valid mobile number"
}
}
});
예 :http://jsfiddle.net/andrewwhitaker/5BVCK/
이 방법은 특정 양식 (이것은 다른 분야에 적용 할 수있을만큼 충분히 일반적 (generic)입니다) 유효성 검사 규칙을 제한하지 않습니다.
감사합니다. Andrew. 처음 세 규칙은 이제 체크 박스가 체크 된 경우에만 적용되며 폼은 비어있을 수 있습니다. 나는 기본적으로 10 자리 숫자가 필요하고, #receive_sms_updates가 체크 된 경우에만 04로 시작하는 숫자가 필요합니다. –
@AaronMoodie : 아, 알겠습니다. 이 경우 사용자 정의 규칙에서 한 줄을 놓쳤다 고 생각합니다. 내 업데이트 된 답변을 참조하십시오. –
아, 간단합니다. 대단히 감사합니다. –