我有一个由第三方模块添加的按钮。单击此按钮时,第三个模块会发送一个 ajax 请求(我无法更改第三方代码)。我怎样才能隐藏这个按钮ajaxStart
并显示它ajaxStop
?
我试过了:
$('#buttonId').click(function() {
$(this).ajaxStart(function() { $(this).hide(); }).ajaxStop(function() { $(this).show(); });
});
但它不能正常工作。
this
问题是在与函数相关的函数中使用这个匿名函数而不是点击事件,所以你可以使用这种方法,
$('#buttonId').click(function() {
var button = $(this);
button.ajaxStart(function() { button.hide(); }).ajaxStop(function() { button.show(); });
});
编辑:在您发表评论后,我检查了ajaxStart
我认为它是您的某个插件,但它是全局事件,因此您不能将该人附加到按钮,您只能将其附加到文档,并且当 AJAX 请求开始或结束时触发相关事件。请看这里。
http://api.jquery.com/ajaxStart/当您将该事件附加到一个对象时,您可以使用它访问它,但它永远不会导致触发事件。所以你可以做这样的事情。
$(document).ajaxStart(function() {
$( "#buttonId" ).hide();
});
$(document).ajaxStop(function() {
$( "#buttonId" ).show();
});
要触发此事件,您必须发出 AJAX 请求,例如;
$( "#buttonId" ).click(function () { $("#divId").load("DivContent.aspx") });
希望能帮助到你。
我找到了简单的解决方案,感谢您的帮助:
var tmp = false;
$('.button').click(function() {
$(this).hide();
tmp = $(this);
});
$(document).ajaxStop(function() {
if (tmp) {
tmp.show();
tmp = false;
}
});
见小提琴:http: //jsfiddle.net/4YJyk/2/
$('#buttonId').click(function() {
$(this).ajaxStart(function() { $("#buttonId").hide(); }).ajaxStop(function() { $("#buttonId").show(); });
});
已编辑