2016-01-16 40 views
2

有没有办法在之前执行javascript-event 这是自然的行为?在其自然行为之前执行事件

例如,使用下面的代码,如果您按键盘上的/键,此字符将立即打印在输入字段中,2秒钟后将显示警报。这是obviuos。

但是有没有办法让之前显示的提示/打印出来?

<input></input> 

<script> 
document.querySelector("input").focus(); 

addEventListener("keydown", function (e) { if (e.keyCode === 191) { myFunc(e); } }); 
function myFunc(e) { 
    setTimeout(function() { 
     alert("Hello!"); 
    }, 2000); 
} 
</script> 
+0

'input'是一个void元素,不接受关闭''标签。 –

+0

仅供参考:在我的键盘上注释'/'keyCodes是:'111'和'shiftKey + 55' –

回答

1

统一的SOLU keypress事件:

addEventListener("keypress", function(e) { 
    var val = e.which || e.keyCode; 
    e.preventDefault(); 
    myFunc(e.target, val); 
}); 

function myFunc(target, val) { 
    setTimeout(function() { 
    alert("Hello!"); 
    target.value = String.fromCharCode(val); 
    }, 2000); 
} 

尝试一下。

+0

太棒了,那有效!谢谢,罗马。 –

+0

@ john1121,欢迎您:) – RomanPerekhrest

0

您所描述的行为实际上是默认的,如下所示:

document.getElementById('test').addEventListener('keydown', function(e) { 
 
    e.preventDefault(); 
 
}, true);
<input type="text" id="test">

如果取消了​​事件,关键是不能打印。因此,代码在其默认操作之前执行。

0

试图改变

function myFunc(e) { 
    setTimeout(function() { 
     alert("Hello!"); 
    }, 2000); 
} 

function myFunc(e) { 
    alert("Hello!"); 
} 
1

试试这个 - 它的一个黑客位

document.querySelector("input").focus(); 
 

 
addEventListener("keyup", function(e) { 
 
    console.log(e); 
 
    //debugger; 
 
    if (e.keyCode === 191) { 
 
    e.target.value = ""; 
 
    myFunc(e, e.target); 
 
    } 
 
}); 
 

 
function myFunc(e, t) { 
 
    setTimeout(function() { 
 
    alert("Hello!"); 
 
    t.value = "/"; 
 
    }, 2000); 
 
}
<input></input>

相关问题