gpt4 book ai didi

javascript - IE e.keyCode - 如何区分&符号和向上箭头?

转载 作者:数据小太阳 更新时间:2023-10-29 04:15:16 25 4
gpt4 key购买 nike

我正在尝试修复一个 jQuery UI 小部件上的一个非常奇怪的 javascript 行为。IE7 (win XP), jQuery 1.2.6 (是的,这是一个旧版本)。

小部件是一个组合框,它捕获键盘事件并对箭头键具有特殊行为。

当我尝试在 flexbox 输入字段中键入“&”字符时,出现了奇怪的行为。

flexbox 有一些代码如下:

//initialization
$myInputElement.keypress($.flexbox.process_key);
$.flexbox.process_key = function process_key(e) {
$.flexbox.flexboxFromInput(this).processKey(e);
return true;
};

//on the flexbox object's prototype:
...
processKey: function processKey(e) {
var mod = 0;
if (typeof (e.ctrlKey) !== 'undefined') {
if (e.ctrlKey) mod |= 1;
if (e.shiftKey) mod |= 2;
} else {
if (e.modifiers & Event.CONTROL_MASK) mod |= 1;
if (e.modifiers & Event.SHIFT_MASK) mod |= 2;
}
...
switch (e.keyCode) {
case 38: // up
this.prevResult();
break;
case 40: // down
if (this.getCtr().is(':visible')) this.nextResult();
else this.flexboxDelay(true);
break;
...etc.
}
}
...

当我引入日志语句时,我发现按下“&”(shift+7)会产生三个按键事件:

INFO: Flexbox> processKey, keyCode=16, ctrl=false, shift=true
INFO: Flexbox> processKey, keyCode=55, ctrl=false, shift=true
INFO: Flexbox> processKey, keyCode=38, ctrl=false, shift=true

显然,keyCode 38 既是向上箭头键又是& 符号的ASCII 码??

当我写这篇文章时,我突然想到我可以将按键检测为“shift+7”(keyCode 55)以将其视为&符号键,然后设置某种标志以忽略下一个按键(是 38)。这似乎是一个可怕的黑客攻击。

有没有人有更好的方法来区分特殊字符,例如“&”和 IE 中的箭头键?

最佳答案

这就是我最终做的:

    /*
* Hack around a wierd behavior in IE where "&%'(" have the same keyCodes
* as the arrow keys.
*/
if (keyCodeIn(e.keyCode, 55, 53, 57) && (mod & 2) && !(mod & 1)) {
this.ignoreNextArrowKey = true;
}
else if (222 === e.keyCode && !(mod & 2) && !(mod & 1)) {
this.ignoreNextArrowKey = true;
}
else if (keyCodeIn(e.keyCode, 38, 37, 39, 40) && this.ignoreNextArrowKey) {
this.ignoreNextArrowKey = false;
return;
}

//...

function keyCodeIn(keyCode) {
for(var i = 1; i < arguments.length; i++) {
if (arguments[i] === keyCode) {
return true;
}
}
return false;
}

希望这对某人有所帮助。如果您要重用这段代码,您可能需要调整关键字“this”的用法,具体取决于它引用的对象(这里,它是与 flexbox 小部件关联的 javascript 对象)。

编辑:我更新了这段代码,并删除了之前存在的正则表达式测试,我发现它有问题。

关于javascript - IE e.keyCode - 如何区分&符号和向上箭头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376004/

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