Подтвердить что ты не робот

Не работает jQuery

Я пытаюсь сосредоточиться на проверке валидации кредитной карты. но странно focus() не работает.

$('#cc_number').validateCreditCard(function (result) {
    if (result.length_valid && result.luhn_valid) {

    } else {
       $("#cc_number").focus();
       return false;
    }
});

<input  type="text" id='cc_number' name="cc_number" />
4b9b3361

Ответ 1

Как упомянутый в комментариях, ваш оригинальный jsfiddle содержит решение.

Обходной путь - установить тайм-аут на вызов фокуса.

setTimeout(function(){
    $("#cc_number").focus();
}, 0);

Я не уверен на 100%, но может случиться так, что, когда предупреждение вызывается размытием, вы никогда не позволяете текстовому полю терять фокус, и поэтому, когда фокус вызывается, он уже имеет его.

Используя таймаут, вы помещаете логику в отдельный поток, который выполняется отдельно от основного кода javascript (как функция обратного вызова).


Но поскольку ваши комментарии к вопросу также упоминаются, выставляя фокус до тех пор, пока проверки не будут раздражать.

Но это скорее критика UX.

Ответ 2

Ваш DOM может обновляться, так что фокус здесь не работает. Вместо этого вы можете следовать этому подходу:

$('#cc_number').validateCreditCard(function (result) {
    if (result.length_valid && result.luhn_valid) {

   } else {
      $("#cc_number").attr("autofocus","autofocus")
      return false;
   }
});