Jus*_*tin 6 javascript jquery events
我有一个文本输入,当用户按下shift(keydown)并绑定一个监听器以使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');
}
});
};
})
Run Code Online (Sandbox Code Playgroud)
当在按下和释放换档键之间没有按下任何字符时,这可以正常工作.问题是,当换档失败并且按下另一个角色时,换档键似乎已被完全遗忘.释放shift键时,没有键盘触发.
我尝试触发.which属性设置为16 的'假'keydown,在按下其他字符后向右移动,但无济于事.
任何建议将不胜感激!
按下 时shift,它将连续触发keydown事件,直到您释放它为止,因此您的示例将绑定与触发的事件一样多的keyup处理程序keydown。这很可能会导致各种奇怪的问题。
相反,将keydown和绑定keyup到同一个处理程序并在那里发挥你的魔力:
$("#foo").on("keydown keyup", function (e) {
if (e.which === 16) {
if (e.type === "keydown") {
// make #foo transparent
} else {
// return #foo to its former glory
}
}
});
Run Code Online (Sandbox Code Playgroud)
请参阅jsFiddle 上的测试用例。
但是,如果在按下然后释放时失去输入焦点shift,则它将无法按预期工作。解决这个问题的一种方法是绑定到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");
}
});
Run Code Online (Sandbox Code Playgroud)
请参阅jsFiddle 上的测试用例。
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |