Si "# page-refresh" es en realidad un botón (un elemento button
o input type="button"
), puede utilizar su propiedad disabled
a continuación, establecer un tiempo de espera para restaurarlo:
$('#page-refresh').click(function() {
var refreshButton = this;
$.ajax({
url: "/page1.php",
cache: false,
dataType: "html",
success: function(data) {
$('#pagelist').html(data);
refreshButton.disabled = true;
setTimeout(function() {
refreshButton.disabled = false;
}, 5000);
}
});
return false;
});
Si no es realmente un botón, puede simular la propiedad disabled
. Lo haré con una clase aquí para que pueda mostrar el estado desactivado por el usuario a través de CSS:
$('#page-refresh').click(function() {
var $refreshButton = $(this);
if (!$refreshButton.hasClass('disabled')) {
$.ajax({
url: "/page1.php",
cache: false,
dataType: "html",
success: function(data) {
$('#pagelist').html(data);
$refreshButton.addClass('disabled');
setTimeout(function() {
$refreshButton.removeClass('disabled');
}, 5000);
}
});
return false;
});
Tenga en cuenta que en el primer caso, me quedo con una referencia al elemento DOM (var refreshButton = this;
), pero en el segundo caso estoy manteniendo una referencia a un contenedor jQuery alrededor de él (var $refreshButton = $(this);
). Eso es solo porque jQuery hace que sea más fácil probar/agregar/eliminar nombres de clase. En ambos casos, esa referencia se libera una vez que se liberan los cierres en su controlador de eventos (en lo anterior, eso es cinco segundos después de que se complete la llamada ajax).
Usted dijo específicamente que quería para desactivarlo después la llamada AJAX es completa, pero como señala Marcus continuación, es probable que quieren desactivarlo cuando a partir de la llamada AJAX. Basta con mover el bit de desactivación de un poco, y agregar un controlador de error
para el caso en success
no se consiga llamar (error
manipuladores suelen ser una buena idea en cualquier caso):
botón real:
$('#page-refresh').click(function() {
var refreshButton = this;
refreshButton.disabled = true; // <== Moved
$.ajax({
url: "/page1.php",
cache: false,
dataType: "html",
success: function(data) {
$('#pagelist').html(data);
setTimeout(function() {
refreshButton.disabled = false;
}, 5000);
},
error: function() { // <== Added
refreshButton.disabled = false;
}
});
return false;
});
simuladas a través de 'discapacitados' clase:
$('#page-refresh').click(function() {
var $refreshButton = $(this);
if (!$refreshButton.hasClass('disabled')) {
$refreshButton.addClass('disabled'); // <== Moved
$.ajax({
url: "/page1.php",
cache: false,
dataType: "html",
success: function(data) {
$('#pagelist').html(data);
setTimeout(function() {
$refreshButton.removeClass('disabled');
}, 5000);
},
error: function() { // <== Added
$refreshButton.removeClass('disabled');
}
});
return false;
});
Tal vez una buena idea sería la de desactivar el botón antes de que la llamada AJAX se apaga (para evitar spam de la llamada AJAX) y luego, si la llamada éxito viene use "clearTimeout" para deshacerse de un tiempo de espera existente de 5 segundos y cree uno nuevo desde ese punto para volver a habilitar el botón. --- Además, probablemente también tenga un 'error: function() {}' que despejó el tiempo de espera y lo volvió a habilitar si se usara ese enfoque, para evitar que el botón permanezca desactivado para siempre en el caso de una llamada AJAX fallida. –
@Marcus: De acuerdo. La pregunta era específica sobre cuándo querían hacerlo, pero agregaré una nota. –
@TJ Yup, solo agrego mis dos peniques vale la pena. –