2016-01-16 43 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>

相關問題