2015-01-23 8 views
0

기본 양식에 jquery 유효성 검사가 바인딩되어 있습니다.jQuery 유효성 검사, 첫 번째 유효성 검사 onsubmit, 다음 유효성 검사 onkeyup

HTML :

<form id="form-subscribe" method="post"> 
    <div class="register_pane_content"> 
     <label>Nom</label> 
     <input placeholder="Votre nom" type="text" id="lastname" name="lastname" value="" class=""/> 
    </div> 

    <div class="register_pane_content"> 
     <label>Prénom</label> 
     <input placeholder="Votre prénom" type="text" id="firstname" name="firstname" value="" class=""/> 
    </div> 

    <div class="register_pane_content "> 
     <label>E-mail</label> 
     <input placeholder="Votre e-mail" type="text" id="email" name="email" value="" class=""/> 
    </div> 

    <div class="clear">&nbsp;</div> 

    <div class="register_pane_content "> 
     <label>Confirmation e-mail</label> 
     <input placeholder="Votre e-mail" type="text" id="emailConfirm" name="emailConfirm" value="" class=""/> 
    </div> 

    <div class="register_pane_content"> 
     <input class="nh_evoButton" type="submit" value="Valider" /> 
    </div> 
</form> 

jQuery를 확인 :

// Validation du formulaire principal 
$('#form-subscribe').validate({ 
    onkeyup: false, 
    onfocusout: false, 
    onsubmit: true, 
    rules: { 
     "lastname": { 
      required: true 
     }, 
     "firstname": { 
      required: true 
     }, 
     "email": { 
      required: true, 
      email: true 
     }, 
     "emailConfirm": { 
      required: true, 
      equalTo: '#email' 
     }, 
     "phone": { 
      number: true, 
      minlength: 10 
     } 
    } 

}); 

내가 사용자까지 모든 유효성 검사가 처음으로 양식을 제출하지 않습니다. 그것이 onkeyup과 onfocusout을 false로 설정 한 이유입니다. 그러나 제출 유효성 검사가 한 번 트리거되면 키 업에서 다음 유효성 검사를 실행하고 싶습니다.

jquery 유효성 검사 플러그인을 이렇게 사용자 정의 할 수 있습니까?

답변

1

처음으로 사용자가 에 대한 양식을 제출하기 전에는 유효성을 검사하지 않습니다. 그것이 onkeyup과 onfocusout을 false로 설정 한 이유입니다. 그러나 제출 확인이 한 번 트리거되면 키 입력시 다음 유효성 확인 을 트리거하고 싶습니다.

이렇게하면 jquery 유효성 검사 플러그인을 사용자 정의 할 수 있습니까? 이미 플러그인의 기본 행동이다 "게으른 검증"라고 무엇을 요구하고

. See documentation : 필드가 무효로 표시되기 전에

, 검증은 게으른 : 처음 양식을 제출 하기 전에, 사용자는 성가신 메시지를받지 않고 필드를 통해 탭 수 - 그들은 도청되지 않습니다

그래서 단순히 플러그인의 기본 기능을 복원

onkeyup: falseonfocusout: false을 제거 에 의해 실제로 올바른 값을 입력 할 수있는 기회를 가지고 전에. (문서 당, 당신은 true 이러한 설정하지해야합니다.)

는 또한onsubmit: truebecause like onkeyup and onfocusout, that is already the default behavior. As per documentation 제거 에 있고,이 옵션의 "true는 유효한 값하지입니다." 즉

는 설정이

onkeyup: false, // <- preventing all key up validation 
onfocusout: false, // <- preventing all focus out validation 
onsubmit: true, // <- likely breaking something else 

세 줄을 제거 ... 파괴 및/또는 정확한 동작이 요청하는 것을 방지한다.
onfocusoutonkeyup 콜백 함수를 타고 오버


그렇지 않으면, 당신은 하여 정확한 원하는대로 동작을 조정할 수 있습니다. 이것들이 기본값입니다 ...

$('#form-subscribe').validate({ onfocusout: function(element) { if (!this.checkable(element) && (element.name in this.submitted || !this.optional(element))) { this.element(element); // triggers validation on the field } }, onkeyup: function(element, event) { if (event.which === 9 && this.elementValue(element) === "") { return; } else if (element.name in this.submitted || element === this.lastElement) { this.element(element); // triggers validation on the field } }, .... 

는 처음 제출 때까지 발사에서 onfocuout 않도록 다음과 같이 수정합니다. (기본 "게으른"동작은 초점 밖으로에 required 규칙을 무시합니다.)

onfocusout: function(element) { 
    if (!this.checkable(element) && element.name in this.submitted) { 
     this.element(element); // triggers validation on the field 
    } 
}, 
... 

또한 최신 버전의 플러그인을 사용하고 있는지 확인하십시오.

+0

나는이 세 가지 옵션을 제거하고 작업을 시도했지만 작동하지 않았습니다. 나는 이유를 알아 내려고 노력했고, 자바 스크립트가 꽤 오래되었다는 것을 알았다. 나는 그것을 최신 버전 (1.13.1)으로 업그레이드했고, 모든 것이 순조롭게 작동하고, 처음에는 게으른 유효성 검사를 수행 한 다음, 초점을 맞춘 검증을 수행했습니다. 고맙습니다. – VaN

+0

@VaN, 행동 수정에 대한 질문에 대답 했으므로 왜 내 대답을 "취소합니까?" 사용하고있는 버전을 알려주지 않았기 때문에 아무도 기존 소프트웨어를 사용하고 있다는 것을 알 수있는 방법이 없습니다. – Sparky

+0

실제로 약간의 문제가 있습니다. 게으른 유효성 검사가 예상대로 완전히 작동하지 않습니다. 나는 onkeyup : false, onfocusout : false, onsubmit : true를 제거했다. 전자 메일 필드를 집중시키고 아무 것도 입력하지 않고 초점을 맞추면 유효성 검사가 수행되지 않습니다. 그러나 필드에 초점을 맞추고 (유효하지 않은 전자 메일에) 무언가를 입력하고 초점을 맞추면 유효성 검증이 실행되고 필드는 유효하지 않은 것으로 표시됩니다. 첫 번째 제출시 유효성 검사를 처음 실행해서는 안됩니까? – VaN