JavaScript中的事件检查



如何检查(特定类型的)事件是否发生?假设我必须使用以下代码:

<html>
<head>
<title>Events</title>
<script type="text/javascript">
document.addEventListener('keydown',
function (event) {
if (event.keyCode == 13) { //ENTER key was pressed
alert("Hahaha!");
}
}, false);
document.addEventListener('click',
function () {
alert("Ahahahah!");

}, false)
</script>
</head>
<body></body>
</html>

假设我希望在按下ENTER键和单击事件发生后显示带有字符串"You pressed ENTER after the click event!"的警报框。

您需要记录发生的顺序。默认情况下,JavaScript不会以您描述的方式记忆事件链,因为您可以按任何顺序触发它们,所以这将是该语言的一个无用功能。

基本上,当点击事件被触发时,您需要记录它已经被触发。基本的实现是使用布尔标志。

var clickFired = false;// by default it is false.
document.addEventListener('click', function(event) {
clickFired = true;
}, false);
document.addEventListener('keydown', function(event) {
if (clickFired) {
alert('key pressed after click');
} else {
alert('key pressed before click');
};
};

JavaScript只记得关于事件的一些非常具体的事情。它知道事件触发时是否按下了ctrlKeyaltKeyshiftKeymetaKey,记住气泡规则、触发执行阶段、目标以及您可以通过键入看到的更多内容

var clickFired = false;// by default it is false.
document.addEventListener('click', function(event) {
console.dir(event);//Firebug command.
clickFired = true;
}, false);

此外,请注意,不幸的是,实现跨浏览器兼容的事件管理绝非易事。各种浏览器以非常不同的方式处理事件。一个基本的例子是InternetExplorer使用attachEvent(),而不是addEventListener()

如果您正在为生产环境编写代码,我建议您使用某种形式的库,使您的生活更加轻松。否则,你只需要重新发明轮子,这对学习来说非常棒,但你可能会发现它既乏味又耗时。除非你真的了解JavaScript,否则编写原始代码不适合你希望其他人立即使用的东西。

使用回调函数可能是最简单的。以下是的更多信息示例

function mySandwich(param1, param2, callback) {  
alert('Started eating my sandwich.nnIt has: ' + param1 + ', ' + param2);  
callback();  
}  
mySandwich('ham', 'cheese', function() {  
alert('Finished eating my sandwich.');  
});  

最新更新