0

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

<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 并在单击事件发生后显示。

4

2 回答 2

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,记住了冒泡规则、触发器执行阶段、目标以及您可以通过键入以下内容看到的更多内容:shiftKeymetaKey

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,否则编写原始代码不适合您希望其他人立即使用的东西。

于 2012-12-15T22:52:42.053 回答
0

使用回调函数可能是最简单的。这是一个包含更多信息的示例

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.');  
});  
于 2012-12-15T22:51:57.933 回答