2011-03-11 146 views
0

有一個鏈接,點擊後,將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

回答

2

你應該豎起了 '請稍候......' 消息在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

相關問題