Javascript听两个事件并触发一个函数

时间:2014-05-20 18:09:16

标签: javascript jquery

如何检测两个不同的事件,并且只有在检测到所有两个事件时才会触发一个函数?

6 个答案:

答案 0 :(得分:3)

创建此功能:

    var got = { first : 0, second : 0 };
    function fire(event_type)
    {
      got[ event_type ] = 1;
      if( got.first && got.second )
      {
        //do stuff and reset
         got = { first : 0, second : 0 };
      }
    }

这是听众部分:

    document.onclick=function (){fire('first');}
    document.onmouseover=function (){fire('second');}

答案 1 :(得分:3)

这是Promises excel:

的地方
var prom1 = new Promise(function(resolve, reject){
    $("foo").one("someEvent", resolve);
});
var prom2 = new Promise(function(resolve, reject){
    $("bar").one("otherEvent", resolve);
});
Promise.all([prom1, prom2]).then(function(){
    //woo!
});

答案 2 :(得分:2)

检测它们,在收到它们时进行记录,并检查是否已收到另一个(这意味着已收到)。当发生这种情况时,请记住“忘记”它们。

答案 3 :(得分:1)

你有很多选择。

例如:(不使用任何库)

(function(){
a=false; b=false;
function doIt(){
alert('both function have fired')
}
document.onclick=function (){a=true;if(a&&b) doIt()}
document.onmouseout=function (){b=true;if(a&&b) doIt()}

})()

的jsfiddle: http://jsfiddle.net/3nDds/ 您需要在文档内单击,然后移出文档。

答案 4 :(得分:0)

另一种选择是使用数据属性。

http://jsfiddle.net/vpA3A/3/

$("#mybutton").on("mouseover", function(event) {
    var $button = $(this);
    $button.data("mouse", true);
    dowork($button);
}).on("click", function(event) {
    var $button = $(this);
    $button.data("click", true);
    dowork($button);
});

function dowork($button)
{
    if($button.data("mouse") == true && $button.data("click") == true) {
        alert('both events');
        $button.data('mouse', false).data('click', false);
    }
}

答案 5 :(得分:-1)

如果它的两个状态在第一个事件监听器之后将函数调用放在彼此内。