2013-03-24 2 views
1

나는 이것이 어리 석을 수 있다는 생각을 가지고 있지만 몇 시간 동안 붙어 있습니다.addMethod를 사용한 jquery 유효성 검사가 실패 할 때 실패합니다.

이메일 주소가 이미 데이터베이스에 있는지 확인하기 위해 ajax를 사용하여 jquery 유효성 검사를 사용하는 간단한 양식이 있습니다. 훌륭하게 작동합니다. 전자 메일 주소를 찾으면 복제본을보고하고 그렇지 않으면 조용합니다.

그러나 내가 새로운 것으로 알고있는 이메일을 입력하고 양식의 나머지 부분을 채우고 제출을 누르면 양식 제출을 방지하고 이메일 입력란에 포커스를 설정합니다. 여기

는 jQuery의 :

$(document).ready(function(){ 
var email; 
var name; 
var passwd; 
var passwd_repeat; 

    //form validation rules 
    $("#regForm1").validate({ 
     rules: { 
      name: { 
       required: true, 
       minlength: 3, 
      }, 
      passwd: { 
       required: true, 
       minlength: 8, 
      }, 
      passwd_repeat: { 
       required: true, 
       equalTo: passwd, 
       minlength: 8 
      } 
     }, 
     messages: 
     { 
      name: "Please enter your name.", 
      passwd: "Please enter a password.", 
      passwd_repeat: "Passwords must match." 
     } 
    }); 

    $.validator.addMethod("validateUserEmail", function(value, element) { 
     var inputElem = $('#regForm1 :input[name="email"]'), 
     data = { "email=" : inputElem.val() }, 
     eReport = ''; //error report*/ 
     var dataString = 'email='+ inputElem.val(); 
     $.ajax({ 
      type: "POST", 
      url: '/checkdups.php', 
      data: dataString, 
      success: function(html) { 
       if (html !== 'true') { 
        $('#email').after('<label class="error" for="email">error - '+inputElem.val()+' already in use. Please <a href="http://tester4.com/staff/auth/login">Log in</a> with '+inputElem.val()+'.</label>'); 
        return false; 
       } 
       else { 
        return true; 
       } 
      }, 
      error: function(xhr, textStatus, errorThrown) 
      { 
       alert('ajax loading error... ... '+url + query); 
       return false; 
      } 
     }); 
    }, 
''); 

$(':input[name="email"]').rules("add", { "validateUserEmail" : true});  

});

처음으로 작업 할 수 없기 때문에 .remote를 사용하는 대신 addMethod를 사용하여 규칙을 추가합니다 (페이지를 새로 고침하지 않고 일련의 중복을 거부하지 않음). 해결 방법으로 제안되었습니다. 추가 된 메소드를 주석 처리 할 때, 양식을 제출할 수는 있지만, 물론 중복을 확인하지는 않습니다.

어쨌든 통찰력은 대단히 감사하겠습니다.

요한은

답변

2

당신은 정말 remote를 사용해야합니다. 나는 당신이 예상대로 작동하지 않는 이유를 확실히 모르겠다 - 멀리 떨어진 은 여러 번 호출된다. 기본적으로 작동하는 방식은 제출을 누르기 전까지는 원격 페이지를 호출하지 않는 것입니다. 원격 호출이 잘못되었다고 말하면 그 이후의 모든 키 입력은 새로운 원격 호출을 생성합니다.

여기에 구축 할 수있는 simple working example입니다. 나는 당신이 3 개의 변경을 할 때까지 항상 false를 반환하도록 설정했다. 따라서 다음 단계를 따라야합니다.

  1. [email protected]을 입력하고 제출을 클릭하십시오. 유효하지 않은 것으로 표시됩니다.
  2. 는 M을 삭제 (무효)
  3. 유형 com (고정)
  4. 제출 (때문에 지금 유효한 이메일 주소를없는에 유효하지만)을 C를 삭제 (무효)를 (을)를 삭제

    rules: { 
        email: { 
         email: true, 
         remote: { 
          url: '/echo/json/', 
          data: { 
           json: function(){ 
            response++; 
            return (response > 3)?'true':'false'; 
           } 
          }, 
          complete: function(data){ 
           $('#log').append('remote triggered<br>'); 
          }, 
          type: 'post' 
         }, 
         required: true 
        } 
    } 
    
    : 그 바이올린에서 키 코드 규칙에 (작품)

은 (응답이 예를 들어 글로벌 카운터) 객체

0

@Ryley, 답장을 보내 주셔서 감사합니다. 나는 리모트를 재 시도했고 잘 동작했다. Firefox 캐시에 문제가 있다고 생각합니다.

광산은 너와 매우 비슷해 보인다.

관련 문제