Подтвердить что ты не робот

JQuery Ожидание многократных событий

Можно ли "ждать" нескольких событий перед выполнением функции? Я знаю, что возможно с помощью jQuery deferred obejcts использовать $.when для ожидания двух promises для решения, но я задавался вопросом, возможно ли это с помощью просто старых событий?

Предположим, что событие click и настраиваемое событие вызывают предупреждение, например:

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

Ответ 1

Вы можете использовать отложенные, вам просто нужно создать их самостоятельно.

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"); 
});

Ответ 2

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.

Будет выдано предупреждение 1 только тогда, когда оба события будут выполнены/запущены.

Fiddle