gpt4 book ai didi

javascript - shift 键在另一个键被按下后被忽略,糟糕的 shift 键。我如何检测它何时发布?

转载 作者:数据小太阳 更新时间:2023-10-29 05:36:21 26 4
gpt4 key购买 nike

我有一个文本输入,当用户按下 shift(keydown)并绑定(bind)一个监听器以监听 shift 键时,它现在变得透明

即。

$('#foo').keydown(function(){
if(event.which==16){
//make #foo transparent
$(this).keyup(function(){
if(event.which==16){
//return #foo to its former glory
$(this).unbind('keyup');
}
});
};
})

当在按下和释放 shift 键之间的过渡期间没有按下任何字符时,这可以正常工作。问题是,当按下 shift 并按下另一个字符时,shift 键似乎已被完全遗忘。释放 shift 键时,不会触发任何 keyup。

我尝试在 .which 属性设置为 16 的情况下触发“假”按键,以便在按下其他字符后将其推向正确的方向,但无济于事。

如有任何建议,我们将不胜感激!

最佳答案

当按下 shift 时,它将持续触发 keydown 事件直到你松开它,所以你的示例将绑定(bind)尽可能多的 keyup 处理程序keydown 事件被触发。这很可能会导致各种奇怪的问题。

相反,将 keydownkeyup 绑定(bind)到同一个处理程序,并在其中施展魔法:

$("#foo").on("keydown keyup", function (e) {
if (e.which === 16) {
if (e.type === "keydown") {
// make #foo transparent
} else {
// return #foo to its former glory
}
}
});

参见 test case on jsFiddle .

但是,如果您在按下 shift 然后松开时失去输入焦点,它将无法按预期工作。解决它的一种方法是改为绑定(bind)到 window:

var $foo = $("#foo");
var shiftPressed = false;

$(window).on("keydown keyup", function (e) {
if (e.which === 16) {
shiftPressed = e.type === "keydown";
if (shiftPressed && e.target === $foo[0]) {
$foo.addClass("transparent");
} else {
$foo.removeClass("transparent");
}
}
});

$foo.on("focus blur", function (e) {
if (e.type === "focus" && shiftPressed) {
$foo.addClass("transparent");
} else {
$foo.removeClass("transparent");
}
});

参见 test case on jsFiddle .

关于javascript - shift 键在另一个键被按下后被忽略,糟糕的 shift 键。我如何检测它何时发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17447210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com