Wenn "# page-Refresh" ist wirklich eine Schaltfläche (a button
oder input type="button"
Element), können Sie seine disabled
Eigenschaft verwenden und stellen Sie dann einen Timeout, um sie wiederherzustellen:
$('#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;
});
Wenn es nicht wirklich eine Schaltfläche, können Sie die disabled
Eigenschaft simulieren. Ich werde hier mit einer Klasse tun, so dass Sie den deaktivierten Zustand für den Benutzer über CSS zeigen:
$('#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;
});
Beachten Sie, dass im ersten Fall, ich einen Verweis auf das DOM-Element zu halten (var refreshButton = this;
), aber im zweiten Fall behalte ich einen Verweis auf einen jQuery-Wrapper (var $refreshButton = $(this);
). Das liegt nur daran, dass jQuery das Testen/Hinzufügen/Entfernen von Klassennamen erleichtert. In beiden Fällen wird diese Referenz freigegeben, sobald die Closures in Ihrem Event-Handler freigegeben wurden (im obigen Beispiel sind das fünf Sekunden, nachdem der Ajax-Aufruf abgeschlossen wurde).
Sie ausdrücklich gesagt, Sie es nach der Ajax-Aufruf abgeschlossen ist, aber als Marcus weist darauf hin, unten, werden Sie wahrscheinlich um sie deaktivieren deaktivieren möchten wollte, als der Anruf Ajax starten. Einfach mit der Deaktivierung Bit ein wenig, und fügen Sie einen error
Handler für den Fall, dass success
nicht aufgerufen (error
Handler sind in der Regel eine gute Idee, in jedem Fall):
Echt Taste:
$('#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;
});
über 'behindert' Klasse Simulierte:
$('#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;
});
eine gute Idee wäre, um die Schaltfläche zu deaktivieren, bevor der AJAX-Aufruf aus geht Vielleicht (Spamming den AJAX-Aufruf zu vermeiden) und dann, wenn der Erfolg Anruf kommt Verwenden Sie 'clearTimeout', um ein vorhandenes 5-Sekunden-Timeout zu entfernen und von diesem Punkt an ein neues zu erstellen, um die Schaltfläche wieder zu aktivieren. --- --- Zusätzlich hätte ich wahrscheinlich auch eine 'error: function() {}', die die Zeitüberschreitung löschte und die Schaltfläche wieder aktivierte, wenn dieser Ansatz verwendet wurde, um die Schaltfläche für immer deaktiviert zu vermeiden im Falle eines fehlgeschlagenen AJAX-Anrufs. –
@Marcus: Einverstanden. Die Frage war genau, wann sie es tun wollten, aber ich werde eine Notiz hinzufügen. –
@TJ Yup, nur meine zwei Pennys wert hinzufügen. –