Если «# страница-обновления» действительно кнопка (а button
или input type="button"
элемент), вы можете использовать его свойство disabled
, а затем установить тайм-аут, чтобы восстановить его:
$('#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;
});
Если это не действительно a кнопка, вы можете имитировать свойство disabled
. Я сделаю это с классом здесь, так что вы можете показать отключенное состояние для пользователя с помощью 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;
});
Обратите внимание, что в первом случае, я держу ссылку на элемент DOM (var refreshButton = this;
), но во втором случае я сохраняю ссылку на обертку jQuery вокруг нее (var $refreshButton = $(this);
). Это просто потому, что jQuery упрощает тестирование/добавление/удаление имен классов. В обоих случаях эта ссылка высвобождается после освобождения блокировок в обработчике событий (в приведенном выше примере это через пять секунд после завершения вызова ajax).
Вы специально сказали, что вы хотели, чтобы отключить его после вызов Ajax является полным, но, как Маркус указывает ниже, вы, вероятно, хотите, чтобы отключить его, когда начиная на основе AJAX вызова. Просто переместите отключающий немного вверх немного, и добавьте error
обработчик для случая, когда success
не дозвонились (error
обработчики, как правило, хорошая идея в любом случае):
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;
});
смоделированные с помощью 'инвалид' класса:
$('#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;
});
Может быть хорошей идеей будет отключить кнопку до вызова AJAX выходит (чтобы избежать спама вызов AJAX), а затем, если вызов приходит успех используйте «clearTimeout», чтобы избавиться от существующего 5-секундного тайм-аута и создать новый с этой точки, чтобы снова включить кнопку. --- Кроме того, у меня, вероятно, также была бы функция 'error: function() {}', которая очистила тайм-аут и снова включила кнопку, если бы этот подход был использован, чтобы избежать останова кнопки навсегда в случае сбоя вызова AJAX. –
@Marcus: Согласовано. Вопрос был конкретным, когда они хотели это сделать, но я добавлю примечание. –
@TJ Yup, просто добавив мои две пенни. –