在AJAX请求时禁用按钮
我正在尝试在单击按钮后禁用它。我试过:在AJAX请求时禁用按钮,ajax,jquery-ui,jquery,Ajax,Jquery Ui,Jquery,我正在尝试在单击按钮后禁用它。我试过: $("#ajaxStart").click(function() { $("#ajaxStart").attr("disabled", true); $.ajax({ url: 'http://localhost:8080/jQueryTest/test.json', data: { action: 'viewRekonInfo' }, type: 'post',
$("#ajaxStart").click(function() {
$("#ajaxStart").attr("disabled", true);
$.ajax({
url: 'http://localhost:8080/jQueryTest/test.json',
data: {
action: 'viewRekonInfo'
},
type: 'post',
success: function(response){
//success process here
$("#alertContainer").delay(1000).fadeOut(800);
},
error: errorhandler,
dataType: 'json'
});
$("#ajaxStart").attr("disabled", false);
});
但是按钮没有被禁用。当我删除$(“#ajaxStart”).attr(“disabled”,false)时代码>按钮被禁用
虽然这不是预期的工作,但我认为代码序列是正确的。任何帮助都将不胜感激。在您的代码中,您只需在同一按钮上禁用并启用该按钮,然后单击
您必须在AJAX调用完成时启用它
像这样的
success: function(response){
$("#ajaxStart").attr("disabled", false);
//success process here
$("#alertContainer").delay(1000).fadeOut(800);
},
放置$(“#ajaxStart”).attr(“禁用”,false)代码>在成功函数中:
$("#ajaxStart").click(function() {
$("#ajaxStart").attr("disabled", true);
$.ajax({
url: 'http://localhost:8080/jQueryTest/test.json',
data: {
action: 'viewRekonInfo'
},
type: 'post',
success: function(response){
//success process here
$("#alertContainer").delay(1000).fadeOut(800);
$("#ajaxStart").attr("disabled", false);
},
error: errorhandler,
dataType: 'json'
});
});
这将确保数据加载后禁用设置为false。。。当前,您可以在同一单击功能中禁用和启用按钮,即同时启用。调用$.ajax()
将不会阻止”--这意味着它将立即返回,然后立即启用按钮,因此按钮不会被禁用
通过使用complete
,可以在AJAX成功、出错或以其他方式完成时启用该按钮:
完成(XMLHttpRequest,
文本状态)
待执行的函数
请求完成时调用
(在成功和错误后,将执行回调。)
已执行)。函数被传递
两个参数:XMLHttpRequest
对象和对
请求的状态(“成功”,
“未修改”、“错误”、“超时”或
“解析器错误”)。这是一个Ajax事件
我通过定义两个jquery函数解决了这个问题:
var showDisableLayer = function() {
$('<div id="loading" style="position:fixed; z-index: 2147483647; top:0; left:0; background-color: white; opacity:0.0;filter:alpha(opacity=0);"></div>').appendTo(document.body);
$("#loading").height($(document).height());
$("#loading").width($(document).width());
};
var hideDisableLayer = function() {
$("#loading").remove();
};
我使用ajax的全局函数解决了这个问题
$(document).ajaxStart(function () {
$("#btnSubmit").attr("disabled", true);
});
$(document).ajaxComplete(function () {
$("#btnSubmit").attr("disabled", false);
});
这是文档。实际上,我会把它放在complete
回调中,因为如果请求失败,我不一定希望按钮保持禁用状态。遗憾的是,如果阻止用户再次单击所需的时间超过用户再次单击所需的时间,那么这里的答案都不起作用。例如,如果用户在禁用按钮或在按钮上方动态添加元素之前快速(有意或无意)多次单击,则会注册多次单击。目前还没有找到解决方案。
$(document).ajaxStart(function () {
$("#btnSubmit").attr("disabled", true);
});
$(document).ajaxComplete(function () {
$("#btnSubmit").attr("disabled", false);
});