jQuery等待多个事件触发

时间:2013-02-15 10:12:32

标签: javascript jquery jquery-deferred

在执行函数之前是否可以“等待”多个事件?我知道可能jQuery deferred使用$.when来等待两个承诺来解决,但我想知道它是否可能只是简单的旧事件?

假设点击事件和自定义事件触发警报,例如:

$.when("click", "customEvent").then(function(){ alert("yay"); });

2 个答案:

答案 0 :(得分:25)

可以使用延迟,你只需要自己创建它们。

var clickDfd = $.Deferred();
var eventDfd = $.Deferred();
$("div").on("click", function(e) {
   clickDfd.resolve();
});

$("div").on("some-event", function(e) {
   eventDfd.resolve();
});

$.when(clickDfd, eventDfd).done(function(){ 
    alert("yay"); 
});

答案 1 :(得分:1)

var click = 0;
var hover = 0;
$("div").on("click mouseenter", function(e) {
   if(e.type == 'click') {
      click = 1;
      bana();
   }
   else if(e.type == 'mouseenter') {
      hover = 1;
      bana();
   }
});
function bana() {
   if(click == 1 && hover == 1) {
       alert(1);
       click = 0;
       hover = 0;
   }
   else {
       return false;
   }
}

好吧,检查事件类型并以旧方式设置它们。简单的jQuery和JS。

仅在两个事件都完成/解雇时才会发出警报。

Fiddle