Nope เมื่อกิจกรรมถูกยกเลิกจะถูกยกเลิก
คุณสามารถดำเนินการเหตุการณ์อีกครั้งในภายหลังโดยใช้การตั้งค่าสถานะเพื่อกำหนดว่ารหัสที่กำหนดเองของคุณได้ทำงานอยู่แล้วหรือไม่ - เช่นนี้ (โปรดละเว้นมลพิษเนมสเปซที่โจ่งแจ้ง):
var lots_of_stuff_already_done = false;
$('.button').on('click', function(e) {
if (lots_of_stuff_already_done) {
lots_of_stuff_already_done = false; // reset flag
return; // let the event bubble away
}
e.preventDefault();
// do lots of stuff
lots_of_stuff_already_done = true; // set flag
$(this).trigger('click');
});
ตัวแปรที่มีความเป็นทั่วไปมากขึ้น (ด้วยประโยชน์เพิ่มเติมของการหลีกเลี่ยงมลภาวะของ namespace ทั่วโลก) อาจเป็น:
function onWithPrecondition(callback) {
var isDone = false;
return function(e) {
if (isDone === true)
{
isDone = false;
return;
}
e.preventDefault();
callback.apply(this, arguments);
isDone = true;
$(this).trigger(e.type);
}
}
การใช้งาน:
var someThingsThatNeedToBeDoneFirst = function() { /* ... */ } // do whatever you need
$('.button').on('click', onWithPrecondition(someThingsThatNeedToBeDoneFirst));
โบนัสปลั๊กอิน jQuery ที่เรียบง่ายสุด ๆ พร้อมPromise
การสนับสนุน:
(function( $ ) {
$.fn.onButFirst = function(eventName, /* the name of the event to bind to, e.g. 'click' */
workToBeDoneFirst, /* callback that must complete before the event is re-fired */
workDoneCallback /* optional callback to execute before the event is left to bubble away */) {
var isDone = false;
this.on(eventName, function(e) {
if (isDone === true) {
isDone = false;
workDoneCallback && workDoneCallback.apply(this, arguments);
return;
}
e.preventDefault();
// capture target to re-fire event at
var $target = $(this);
// set up callback for when workToBeDoneFirst has completed
var successfullyCompleted = function() {
isDone = true;
$target.trigger(e.type);
};
// execute workToBeDoneFirst callback
var workResult = workToBeDoneFirst.apply(this, arguments);
// check if workToBeDoneFirst returned a promise
if (workResult && $.isFunction(workResult.then))
{
workResult.then(successfullyCompleted);
}
else
{
successfullyCompleted();
}
});
return this;
};
}(jQuery));
การใช้งาน:
$('.button').onButFirst('click',
function(){
console.log('doing lots of work!');
},
function(){
console.log('done lots of work!');
});