2009-08-11 8 views
8

jQuery에 대해 "미만"유효성 검사기를 작성하려고합니다.jQuery 유효성 검사

<input type="text" id="value1" /> <input type="text" id="value2" /> 

나는 내가 이것을 시도했지만 나는 그것이 동작하지 않습니다 내 검증이

$('#myForm').validate({rules: { value1: { lessThan: "#value2" } } }); 

같이 할 : 나는 그래서 만약 내가 가진 또 다른에 대해 하나의 텍스트 상자를 비교하려면 :

$.validator.addMethod('lessThan', function(value, element, param) { 
    var i = parseInt(value); 
    var j = parseInt($(param).val()); 
    return i >= j; 
}, "Less Than"); 

또 다른 질문은 그 코드를 어디에 넣어야합니까? $ (문서) .ready 또는 태그 안에 있습니까?

답변

11

나는 바보입니다. 나는 실제 코드에서 일부 오타를 만들었고 나는 이것을 검증했다. 많은 유효성 검사 방법에서 볼 수있는 선택 (요소). 여기

$.validator.addMethod('lessThanEqual', function(value, element, param) { 
    if (this.optional(element)) return true; 
    var i = parseInt(value); 
    var j = parseInt($(param).val()); 
    return i <= j; 
}, "The value {0} must be less than {1}"); 

응축 된 버전

$.validator.addMethod('lessThanEqual', function(value, element, param) { 
    return this.optional(element) || parseInt(value) <= parseInt($(param).val()); 
}, "The value {0} must be less than {1}"); 

지금은 내가 FIELD2을 변경할 때 필드 1에 대한 유효성 검사를 다시 실행하는 방법을 알아낼 필요가

됩니다 다음은 작업 기능입니다.

0

실제로 사용자 지정 검사기 메서드를 작성하지 않고도이 작업을 수행 할 수 있다고 생각합니다. 코드 중복없이

$('#myForm').validate({ 
    rules: { 
     value1: { 
      maxlength: $('#value2').val().length 
     } 
    } 
}); 

$('#value2').change(function() { 
    $('#value1').rules('remove', 'maxlength').rules('add', { 
     maxlength: $('#value2').val().length 
    }); 
}); 

또는 더 나은

function getRule() { 
    return { 
     maxlength: $('#value2').val().length 
    }; 
} 

$('#myForm').validate({ 
    rules: { 
     value1: getRule() 
    } 
}); 

$('#value2').change(function() { 
    $('#value1').rules('remove', 'maxlength').rules('add', getRule()); 
}); 
+0

감사합니다. 이것은 작동하지만, 유효성 검사 메소드가 작동하도록했습니다. 너는 나에게 영감을 준 사람이었다. –

+5

-1 OP가 숫자에 대해 말하면 길이에 대해 말합니다. 0_o – bluish

1

당신은 아래 그림과 같이, 모든 문서 준비 블록 내에서 유효성 검사 방법을 삽입 할 수 있습니다.

$().ready(function() { 

    $.validator.addMethod("lessThan", 
     function(value, element, param) { 
      var i = parseFloat(value); 
      var j = parseFloat(param); 
      return (i < j) ? true : false; 
     } 
    ); 

}); 

나는 이것을 수정할 수 있도록 간단하게하려고 노력했습니다. 메서드가 "lessThan"이라면 그냥 그렇게해야합니다. 메서드가 실제로 "작거나 같음"을 수행하면보다 적절한 이름을 고려하십시오.

또한 parseFloat를 사용하여 parseInt보다 융통성있는 메서드를 사용할 수 있습니다.

유효성 검사기 내에서 올바르게 사용하고 있습니다. 그래서 말의 유효성 검사를 위해 10 미만 :

$('#myForm').validate({ rules: { value1: { lessThan: "10"}} }); 

행운을 빈다!

+1

왜 그런 삼항 연산자를 사용하고 있습니까? return 문은'return (i