我正在努力专注于信用卡验证失败。但奇怪的是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" />
答案 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;
}
});