如何检查是否发生了某种事件(特定类型)?假设我必须使用以下代码:
<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!”按下ENTER时和单击事件发生后显示。
答案 0 :(得分:2)
您需要记录发生的顺序。 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只会记住一些关于事件的非常具体的事情。它知道在触发事件时是否按下了ctrlKey
,altKey
,shiftKey
或metaKey
,还记得了泡泡规则,触发器执行阶段,目标还有一些你可以通过输入来看到的东西:
var clickFired = false;// by default it is false.
document.addEventListener('click', function(event) {
console.dir(event);//Firebug command.
clickFired = true;
}, false);
此外,要小心,不幸的是,跨浏览器兼容的事件管理根本无法实现。各种浏览器以非常不同的方式处理事件。一个基本的例子是Internet Explorer使用attachEvent()
,而不是addEventListener()
。〜
如果您正在为生产环境编写代码,我建议您使用某种形式的库来使您的生活更轻松。否则你只需要重新发明轮子,这对于学习目的来说很棒,但你可能会觉得它很乏味且耗时。除非你真的了解JavaScript,否则编写原始代码并不适合你希望其他人立即使用的东西。
答案 1 :(得分:0)
使用回调函数可能是最简单的。以下是包含更多信息here
的示例function mySandwich(param1, param2, callback) {
alert('Started eating my sandwich.\n\nIt has: ' + param1 + ', ' + param2);
callback();
}
mySandwich('ham', 'cheese', function() {
alert('Finished eating my sandwich.');
});