2015-01-23 3 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:

// 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: false и onfocusout: 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 

Удалить все три строки выше.


В противном случае, вы можете настроить поведение на ваш точный вкус по наиважнейший функции обратного вызова onfocusout и onkeyup. Это значения по умолчанию ...

$('#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 от стрельбы не только после первого представить, изменить его следующим образом. (The «ленивое» поведение по умолчанию только игнорирует required правила на фокусе вне.)

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

Также убедитесь, что вы используете последнюю версию плагина.

+0

Я пробовал, что вы сделали, удалив эти 3 варианта, и это не сработало. Я попытался понять, почему, и я обнаружил, что javascript, который я загружал, был довольно старым. Я обновил его до последней версии (1.13.1), и все работает плавно, ленивая проверка сначала, а затем проверка на фокус. Спасибо. – VaN

+0

@VaN, я ответил на ваш вопрос об изменении поведения, так почему вы «отказались» от моего ответа? Никто не мог знать, что вы использовали старое программное обеспечение, так как вы не сказали нам, какие версии вы использовали. – Sparky

+0

mhh на самом деле есть небольшая проблема. ленивая проверка не полностью работает, как ожидалось. Я удалил 'onkeyup: false,', 'onfocusout: false,', 'onsubmit: true'. если я сосредоточусь на поле электронной почты и не нахожу ничего и фокус, никакая проверка не запускается. Но если я сфокусирую свое поле, введите что-то (недействительное письмо) и сконцентрируйтесь, проверка активируется, и поле помечено как недействительное. Не следует сначала запустить триггер проверки? – VaN

Смежные вопросы