2011-02-11 1 views
9

MVC DataAnnotations 및 jQuery unobtrusive javascript 라이브러리를 사용하여 사용자 정의 유효성 검사기를 작성했습니다. 잘 작동합니다. 지금 내가 가진 유일한 문제는 초기 유효성 검사 후 사용자가 필드를 편집하면 각 키 입력에서 유효성 검사기가 실행된다는 것입니다. 유효성 검사기가 입력을 확인하기 위해 웹 서비스를 조회하기 때문에 사용자가 필드를 벗어나 양식을 제출할 때 항상 입력의 유효성을 검사하는 것이 좋습니다. 이 동작을 변경하는 방법이 있습니까? 내 코드는 다음과 같습니다.각 키 스트로크에서 사용자 정의 유효성 검사기 실행 중지

<script type="text/javascript"> 
    $.validator.addMethod("validate_zipcode", function (value, element) { 
     if (value == null || value.length == 0) { 
      return true; 
     } 

     var isValid = false; 
     $.ajax({ 
      async: false, 
      dataType: "json", 
      url: "/api/iszipvalid/" + value, 
      success: function (response) { 
       isValid = response; 
      } 
     }); 

     return isValid; 
    }); 

    $.validator.unobtrusive.adapters.addBool('zipcode', 'validate_zipcode'); 
</script> 

답변

10

아니에요 양이 (내가 테스트 프로젝트 이상을 재빨리 것), 그러나 검증이 같은 검증의 모든 인스턴스 set defaults 당신을 수 있습니다 ASP.NET MVC와 함께 작동합니다 :

$.validator.setDefaults({ onkeyup: false }); 

MVC가 validate에 핸들을 가져 오기 전에 해당 행을 추가 할 수 있다면 모든 양식의 모든 필드에 대해 onkeyup을 사용할 수 없게됩니다 (게시물로 판단하면 확인 될 것 같습니다).

희망이 있습니다.

+0

그 덕분에, 고마워! – Scott

+0

나는 이것을했는데 여전히 모든 키 누르기 (또는 백 스페이스)에서 유효성 검사기 메서드를 호출하지만 필드 밖으로 나가면이 아닌 이 아닙니다! 그 밖의 무엇을 시도 할 수 있습니까? –

3

새 요청을 시작하기 전에 요청을 취소 할 수 있습니다. 당신의 코드는 같을 수 :

<script type="text/javascript"> 
    var request = null; 

    $.validator.addMethod("validate_zipcode", function (value, element) { 
    if (value == null || value.length == 0) { 
     return true; 
    } 

    if (request != null) { 
     request.abort(); 
    } 

    var isValid = false; 
    request = $.ajax({ 
     async: false, 
     dataType: "json", 
     url: "/api/iszipvalid/" + value, 
     success: function (response) { 
      isValid = response; 
     } 
    }); 

    return isValid; 
    }); 

    $.validator.unobtrusive.adapters.addBool('zipcode', 'validate_zipcode'); 
</script> 

이것은 당신이 불을 지르고를 사용하여 만든 호출 보면 JQuery와 UI 자동 완성이하는 일이다.

+0

내가 잘못하면 정정 해 주겠지 만 이미 진행 중이라면 아약스 요청을 취소하겠습니까? 그것은 여전히 ​​블러 이벤트 대신 키 업의 유효성 검사를 시도하지만 한번에 한 번만 호출 할 것입니다. – Scott

+0

맞습니다. 키 업 이외의 인증 방식을 변경할 수있는 방법이 없다는 것을 알고있는 한 정확합니다. 사용자 지정 유효성 검사와 동일한 작업을 수행하는 새 Remote 특성을 살펴볼 가치가 있지만 요청을 취소해도 작동합니다. – lancscoder

+0

원격 속성을 사용 하겠지만 유효성 검사를 기반으로 다른 사용자 정의 로직이 많이 발생합니다 (다른 UI 요소 설정). 나는 또 다른 필드 (전자 메일 주소 - 이미 존재하지 않음)에서이를 구현했지만 모든 키 입력에서 DB를 친다. "키 업"대신 "흐림"으로 이벤트를 변경하는 방법이 있어야합니다 ... – Scott