我想要一个只在多个其他事件处理程序完成时运行的事件处理程序。有没有简单的方法在jQuery中执行此操作?我所拥有的工作正常,但似乎不必要地复杂。
https://jsfiddle.net/sguah2e4/1/
<div id="el1">waiting for element 1 ...</div>
<div id="el2">waiting for element 2 ...</div>
<div id="doneStatus">waiting for both to complete ...</div>
<script>
$(window).on('load', function() {
initMultiHandler();
updateEl1();
updateEl2();
});
function initMultiHandler() {
var event1Done = false;
var event2Done = false;
$('#el1').on('fetched', function () {
event1Done = true;
if (event2Done) allDone();
});
$('#el2').on('updated', function () {
event2Done = true;
if (event1Done) allDone();
});
}
function updateEl1() {
$('#el1').text('element 1 is done!').trigger('fetched');
}
function updateEl2() {
$('#el2').text('element 2 is done!').trigger('updated');
}
function allDone() {
$('#doneStatus').text('both are complete now');
}
</script>
请注意,每个元素的事件类型都不相同 - 因此我的示例中的fetched
和updated
之间存在差异。
理想情况下,我希望这样的1-liner代替:
function initMultiHandler() {
$.on($('#el1').on('fetched') && $('#el1').on('updated'), allDone);
}
jQuery中有没有这样的东西?