你好,我是新手,我有一个脚本可以在按下键盘时触发功能。但是我还有一个输入文本字段框,如果要在该输入字段框中键入内容,然后按该键即可触发该功能。该函数会触发,但是如果我在输入字段中键入内容,我不希望该函数触发,有没有办法做到这一点?
window.addEventListener("onkeydown", keyDown, true);
window.addEventListener("keydown", keyDown);
function keyDown() {
var e = window.event;
switch (e.keyCode) {
case 72: // Key H
test();
break;
}
}
function test() {
document.getElementById('Codefield').value = Math.random().toString(36).substring(2, 15);
}
<input id="Codefield" value="" type="text">
<input id="Codefield2" value="Stop test function keydown or keydown if typeing here" type="text">
答案 0 :(得分:2)
如果您将事件监听器添加到window
,则所有输入将触发该函数。仅在需要的地方添加事件监听器。
document.getElementById('Codefield').addEventListener("onkeydown", keyDown, true);
另一种技术是从触发函数内部检查e.target
并忽略代码(如果该代码来自您不想处理的输入)。
答案 1 :(得分:1)
您可以检查当前元素是否为输入元素。
function keyDown(e) {
if (this.tagName == 'INPUT') {
e.stopPropagation();
return;
}
switch (e.keyCode) {
case 72: // Key H
test();
break;
}
}
此外,请勿使用window.event
。这是非标准的,无法在Firefox中使用。该事件是事件侦听器的第一个参数。
答案 2 :(得分:0)
也许您应该使用focus
选择器(来自jQuery):
if($("#Codefield2:focus")) {
thisInput = true;
}
然后在函数的开头添加一个if
语句,并检查thisInput
是否为真。