jQuery焦点不起作用

时间:2013-08-22 14:46:18

标签: javascript 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" />

2 个答案:

答案 0 :(得分:56)

作为mentioned in the comments,您原来的jsfiddle包含解决方案。

解决方法是在焦点调用上设置超时。

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

我不是百分百肯定,但可能是因为在模糊时调用警报,你实际上从不允许文本框失去焦点,因此当调用焦点时,它已经拥有它。

通过使用超时,您将逻辑放入一个单独的线程,该线程与主javascript代码分开运行(非常类似于回调函数)。


但正如你的问题评论也提到的那样,强制关注直到验证通过是令人讨厌的。

但这更像是一种用户体验批评。

答案 1 :(得分:17)

你的DOM可能正在刷新,所以焦点不在这里。相反,你可以遵循这种方法:

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

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