JQuery Ожидание многократных событий
Можно ли "ждать" нескольких событий перед выполнением функции? Я знаю, что возможно с помощью jQuery
deferred
obejcts использовать $.when
для ожидания двух promises для решения, но я задавался вопросом, возможно ли это с помощью просто старых событий?
Предположим, что событие click и настраиваемое событие вызывают предупреждение, например:
$.when("click", "customEvent").then(function(){ alert("yay"); });
Ответы
Ответ 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