2010-09-26 72 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插入的元素的事件处理程序。

您是否尝试过在事件方法中引发警报以查看它们是否被调用?