为什么jQuery的函数只在第一次被调用时才起作用?
问题描述:
有一个链接,点击后,将HTML加载到div和清空div之间切换。当div被点击加载html时,我使用jQuery ajax load()函数。当文本加载时,我想显示“Please wait ...”,所以我尝试使用jQuery ajaxStart()和ajaxStop()方法,但它们似乎只在第一次调用load()函数时起作用。所以我切换到ajaxSend()和ajaxSuccess,但这似乎也只是在第一次调用加载函数时才起作用。怎么了?为什么jQuery的函数只在第一次被调用时才起作用?
HTML:
<p id="toggleDetail" class="link">Toggle Inspection Detail</p>
<p id="wait"></p>
<div id="inspectionDetail"></div>
的jQuery:
$(
function(){
$('#toggleDetail').click(function(){
if($.trim($('#inspectionDetail').text()).length)
{
$('#inspectionDetail').empty();
}
else
{
$('#inspectionDetail').load('srInspectionDetailFiller.cfm');
}
});
}
);
$(
function(){
$('#wait').ajaxSend(function() {
$(this).text('Please wait...');
});
}
);
$(
function(){
$('#wait').ajaxSuccess(function() {
$(this).text('');
});
}
);
答
你应该竖起了 '请稍候......' 消息在click
功能,那么你load
成功完成后清除消息:
$('#toggleDetail').click(function(){
if($.trim($('#inspectionDetail').text()).length)
{
$('#inspectionDetail').empty();
}
else
{
$('#wait').text('Please wait...');
$('#inspectionDetail').load('srInspectionDetailFiller.cfm', function() {
$('#wait').text('');
});
}
});
编辑:尽管ajaxSend
在技术上应该在这里工作,但我不推荐它。与ajaxSend
,“无论发送什么Ajax请求,都会调用所有ajaxSend处理程序”。在页面上挂钩所有的Ajax请求似乎矫枉过正,你实际上只是试图处理这种单击操作。
+0
我认为他正确使用它。请参阅http://api.jquery.com/ajaxSend/ – ZeissS 2011-03-11 16:13:44
虽然我不确定这是我做到这一点的方式,但您的代码似乎对我很有用:[除了在jsFiddle上伪造Ajax调用以外,没有任何变化](http://jsfiddle.net/k9rba /)。 – 2011-03-11 16:14:59