如果“#page-refresh”确实是一个按钮(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;
});
如果它不是真的按钮,您可以模拟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 调用完成后的 5 秒),该引用就会被释放。
您明确表示您想在 ajax 调用完成后禁用它,但正如 Marcus 在下面指出的那样,您可能希望在 开始 ajax 调用时禁用它.只需将禁用位向上移动一点,然后为 success 不被调用的情况添加一个 error 处理程序(error 处理程序通常在任何情况下都是一个好主意):
真正的按钮:
$('#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;
});