我正在尝试着重于信用卡验证失败。但是奇怪的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" />

最佳答案

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

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

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

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

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

但是,正如您的问题评论中提到的那样,将重点放在验证通过之前是令人讨厌的。

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

07-24 19:28
查看更多