如何检测两个不同的事件,并且只有在检测到所有两个事件时才会触发一个函数?
答案 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)
另一种选择是使用数据属性。
$("#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)
如果它的两个状态在第一个事件监听器之后将函数调用放在彼此内。