33

我正试图专注于信用卡验证失败。但奇怪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" />
4

2 回答 2

57

评论中所述,您的原始 jsfiddle 包含解决方案。

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

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

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

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


但是正如您的问题评论还提到的那样,在验证通过之前强制关注是很烦人的。

但这更多是对用户体验的批评。

于 2013-08-22T14:51:12.960 回答
17

您的 DOM 可能正在刷新,因此这里的焦点不起作用。相反,您可以遵循以下方法:

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

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

于 2013-10-28T12:29:14.367 回答