2010-09-26 83 views
4

在我的文檔的HEAD中,我加載了jQuery.js和blockUI jQuery插件。jQuery不能在AJAX中加載DIV

在PHP中,我使用常規的AJAX將其他PHP內容加載到DIV中。在原始的PHP jQuery和blockUI插件中工作得很好,但在任何ajax加載的div中,jQuery和blockUI都沒有做任何事情。沒有控制檯錯誤,沒有警告 - 沒有。

我是一個jQuery初學者,我沒有發現有關此主題的其他文章都能夠把我在解決這個的邊緣,所以我幫助別人可以。在我的代碼下面你會看到我花了一些刺在現場()...

這是在那個被加載到DIV

<script type="text/javascript"> 
    $(document).ready(function() { 

     $('#crazy').live('click',function() { 
      $.blockUI({ message: $('#question'), css: { width: '275px' } }); 
     }); 

     $('#yes').live('click',function() { 
      // update the block message 
      $.blockUI({ message: "<h1>Remote call in progress...</h1>" }); 

      $.ajax({ 
       url: 'wait.php', 
       cache: false, 
       complete: function() { 
        // unblock when remote call returns 
        $.unblockUI(); 
       } 
      }); 
     }); 

     $('#no').live('click',function() { 
      $.unblockUI(); 
      return false; 
     }); 

    }); 
</script> 

這裏我的PHP文件的頂部是從HTML該PHP文件(加載到DIV中):

<input id="crazy" type="submit" value="Show Dialog" /> 

<div id="question" style="display:none; cursor: default"> 
     <h1>Would you like to contine?.</h1> 
     <input type="button" id="yes" value="Yes" /> 
     <input type="button" id="no" value="No" /> 
</div> 

回答

5

當您的AJAX調用完成之前,加載DOM時,您的文檔就緒函數會加載。因此,它僅將.live()調用應用於AJAX調用之前存在的元素。

如果你想的東西應用到由AJAX調用加載的內容,指定AJAX一旦加載完成適用正確的東西的回調函數。

+0

嗨琥珀感謝您的答覆。我對jQuery非常新穎,這句話「爲加載完成後適用的AJAX指定一個回調函數」混淆了我。那個回調函數會是什麼樣子,我會在哪裏放置它? – themerlinproject 2010-09-26 06:27:42

+0

http://api.jquery.com/jQuery.ajax/查看settings參數中的'success'和/或'complete'字段。 – Amber 2010-09-26 06:35:25

+0

「live」事件實際上解決了通過AJAX添加到頁面的元素的問題 - http://api.jquery.com/live/ – partkyle 2010-09-26 06:45:39

2

您使用live版本時遇到了什麼問題?它仍然默默地失敗?

是否有可能在#yes單擊事件方法AJAX請求失敗的原因?

我已經採取了你的代碼,它簡化了大量on jsfiddle here,它似乎是工作的罰款。使用live時沒有問題,它應該修復通過AJAX插入的元素的事件處理程序。

您是否嘗試過在事件方法中引發警報以查看它們是否被調用?