为什么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(''); 
     }); 
    } 
); 
+0

虽然我不确定这是我做到这一点的方式,但您的代码似乎对我很有用:[除了在jsFiddle上伪造Ajax调用以外,没有任何变化](http://jsfiddle.net/k9rba /)。 – 2011-03-11 16:14:59

你应该竖起了 '请稍候......' 消息在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