我在一组输入上写了一些简单的keydown事件处理程序,比如
$('.a, .b, .c').on('keydown', function (e) {
switch(keycode) {
case 9:
e.preventDefault();
e.stopPropagation();
if($('.a'))
// focus next
else if($('.b'))
// focus next
....
break;
}
})
然而,当我按下标签并按住时,光标会无限闪烁,事件不再发生,我必须在窗外聚焦并回来让它停止。
现在已经试图解决很多天了,任何人都可以对如何阻止这种行为有所启发吗?
好的家伙我编辑了代码并重现了错误,我发现了错误并解决了问题。以下是产生效果的代码。
$(document).ready(function(){
$('.c, .d').on('focus', function (e) {
if (e.relatedTarget) {
var v = $(this).val();
var n = v.toString().replace(/,/g, "");
$(this).val(n);
var $elementThis = $(this);
setTimeout(function () { $elementThis.select(); }, 50);
}
});
$('.a, .b').on('focus', function (e) {
if (e.relatedTarget) {
var $elementThis = $(this);
setTimeout(function () { $elementThis.select(); }, 50);
}
});
$('.a, .b, .c, .d').on('keydown', function(e) {
var keycode = e.charCode || e.keyCode || 0;
switch (keycode) {
case 9:
{
e.preventDefault();
e.stopImmediatePropagation();
if ($(this).hasClass('a')) { $('.b').focus(); }
else if ($(this).hasClass('b')) { $('.c').focus(); }
else if ($(this).hasClass('c')) { $('.d').focus(); }
else if ($(this).hasClass('d')) { $('.a').focus(); }
break;
}
}
})
});
给我问题的部分是
setTimeout(function () { $elementThis.select(); }, 50);
导致它不停闪烁。 我找到了另一种选择。欢迎任何建议。
请删除downvote。我希望这种见解对未来的某些人有所帮助。
答案 0 :(得分:1)
你有一个错误。它应该是e.keyCode
:
$('.a, .b, .c').on('keydown', function (e) {
switch(e.keyCode) { // Change this. Also better to check if `e.which`
case 9:
e.preventDefault(); // Change this
e.stopPropagation();
if($('.a'))
;//focus next
else if($('.b'))
;//focus next
....
break;
}
});
答案 1 :(得分:1)
完整版:
$('.a, .b, .c').on('keydown', function (e) {
var charCode = e.which || e.keyCode;
switch(charCode) {
case 9:
e.preventDefault();
e.stopPropagation();
if($('.a'))
;//focus next
else if($('.b'))
;//focus next
....
break;
}
});
答案 2 :(得分:0)
密钥代码
$('.a, .b, .c').on('keydown', function (e) {
switch(e.keyCode)
{
case 9:
e.preventDefault();
e.stopPropagation();
if($('.a'))
//focus next
else if($('.b'))
//focus next
....
break;
}
})