Если вы хотите, чтобы выполнить функцию и проверить, если он работает, то вы можете проверить хранение .data(), связанный с этим элементом.
$(document).on("click.demo", "#btnRun", function (e) {
e.preventDefault();
var self = $(this),
status = self.data("_status");
if (status == "Running") return false;
// Define the status of execution
if(!status) self.data("_status", "Running");
// TODO: add your code here
// When finish, delete the flag
self.removeData("_status");
});
Также вы можете создать closure (см JavaScript: Closures)
Рассмотрим следующий пример: http://jsfiddle.net/qundC
// Creates a closure with status and the callback
var fnExecute = (function() {
var _running = false;
// Function returned by the closure
return function (e) {
e.preventDefault();
if(_running) {
$('#status').text("Running...");
return false;
}
_running = true;
$('#status').text("Starts...");
// TODO: add your code here
// Emulates an expensive processing
setTimeout(function() {
_running = false;
$('#status').text("Done!!");
}, 5000);
};
}());
// Assigns the function returned by the closure
$(document).on("click.demo", "#btnRun", fnExecute);
вы могли бы использовать какой-то веб-пространство имен переменных, чтобы сохранить состояние сценария – sunpietro
использования обратных вызовов для этого. –
[отложен] (http://api.jquery.com/jQuery.Deferred/), [обещает] (http://api.jquery.com/promise/) позволяет отслеживать ход выполнения функций. И вот углубленное руководство по обоим: [link] (http://msdn.microsoft.com/en-us/magazine/gg723713.aspx) – rusln