নাঃ। ইভেন্টটি বাতিল হয়ে গেলে তা বাতিল হয়ে যায়।
আপনার কাস্টম কোডটি ইতিমধ্যে চালিত হয়েছে কিনা তা নির্ধারণ করার জন্য একটি পতাকা ব্যবহার করে আপনি পরে ইভেন্টটিকে পুনরায় গুলি চালাতে পারেন - যেমন - (দয়া করে নির্মোচিত নেমস্পেস দূষণকে উপেক্ষা করুন):
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');
});
আরও সাধারণকরণের একটি বৈকল্পিক (বিশ্বব্যাপী নেমস্পেস দূষণ এড়ানোর অতিরিক্ত সুবিধা সহ) হতে পারে:
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));
Promise
সমর্থন সহ বোনাস সুপার-মিনিমালিস্টিক jQuery প্লাগইন :
(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!');
});