如何在div加载时运行函数?

我想只在div加载时运行一个函数。

当我加载页面时,加载了许多文件。 在列表的末尾,PHP回应了一个div。 当显示这个时,jQuery应该运行一个函数。

我可以通过点击事件来完成此操作,但我希望它能够自动工作,而无需按下按钮。

这是点击的工作原理:

$("#PP_end_show").live("click",function(){ $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); }); 

这是由PHP回应的div

  <?php echo "
"; ?>

在AJAX调用之后生成输出:

 <form id="PP_search_input" method="post" name="search_ID" ONSubmit="xmlhttpPost('PP_search_stream_client.php', 'PP_search_input', 'PP_thumb_output', '');return false; "> <input name="search_string" type="text" class="PP_input" id="search_string" value=""/>  

在生成的输出的末尾,将打印特定的div,并应触发新的jQuery函数。

这就是我要解决这个问题的方法,假设我已经正确地理解了PP_search_input表单的提交,返回所需的html,然后应该执行javascript代码。

 $('#PP_search_input').submit(function() { $.ajax({ url: 'PP_search_stream_client.php', type: 'post', data: $(this).serialize(), success: function(html) { $(html).insertAfter('#whereToInsert') //change to however you want to insert the html .find("#PP_head_bar").slideToggle("slow").end() .find("#PP_info_file_wrap").slideUp("slow"); } }); }); 

尝试将javascript代码放在生成的ajax代码中。

例如,如果你的ajax是从php代码生成的

 
"; ?>

然后像这样尝试smth

 
"; echo '$(function(){$("#PP_head_bar").slideToggle("slow");'; echo '$("#PP_info_file_wrap").slideUp("slow");});'; ?>

您可以使用livequery插件

然后您将按如下方式使用它:

 $('#PP_end_show').livequery(function(){ $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); }); 

当选择器中的元素( #PP_end_show )添加到DOM时,函数中的代码将执行

为什么不回复你的JavaScript和DIV代码?

您可以使用PHP来回显Javascript,如下所示:

你的代码之后:

 
"; ?>

写这个:

 echo ""; 

这应该工作。

在JS中,将要执行的代码包装在函数中。 即

 function showInfoBlock() { $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); } 

在PHP中,写出在写出PP_end_show div之后调用该函数所需的JS。 即

 
"; ?>

这就是你要问的:

 (function($){ var checkForEndInterval = window.setInterval(function(){ if ($('#PP_end_show').length) { // stop interval window.clearInterval(checkForEndInvertal); // call your code now $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); } },200); })(jQuery); 

然而,这不是一个好主意,因为它的愚蠢和你所要求的暗示你不理解,但这就是你在这里的原因。 由于您已经知道调用AJAX的时间,因此请明确调用它并附加成功处理程序。

 $.ajax({ /* your other setup code here */ success : function(data) { // run your code } }); 

如果你没有像你说的那样做AJAX,我会在输出的末尾添加一个脚本标记,并让它将代码称为最简单的方法。 即便如此,您仍然可以使用jQuery.load方法(非事件),默认情况下,该方法会从您的响应中执行JavaScript。

快乐的编码。

保持jquery live-click-function原样

在php中运行以下代码

 
"; echo "$(function(){ $(\"#PP_end_show\").click(); });"; ?>
  $.ready(function(){ $("#wrapper").add("div").attr('id','PP_end_show'); $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); }); 

将实时事件绑定到由文档触发的自定义事件:

 $(document).trigger('echo'); $("#PP_end_show").live("echo", function(){ $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); }); 

参考

Jason Brumwell输入正确的答案,你也可以使用JQuery的$.when函数。

http://api.jquery.com/jQuery.when/

如果想要在所需的div加载后执行的操作绑定到单击事件,只需在ajax请求的末尾触发单击,例如:

 $.ajax({ url:'whatever.php', type:'post', //guessing obviously success: function(data){ $('#PP_end_show').click(); //etc } }); 

这些家伙是对的,你这是所有向后的伙伴

它必须是那个确切的div吗? 在我看来,你应该只在文档的加载时执行该function。 这样你知道你所有的元素都被加载了。

 $(function() { // This function is executed when the DOM is ready, including that last div. // Could be that images are still loading, but your code usually won't depend on that. } 

试试这个,

 if(window.isBodyLoaded){ try{ $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); }catch(d){ alert(d) } } 

使用回调函数。 它是一个在处理事件后立即触发的function。 所以对于Jquery:

 $("#PP_end_show").live("click",function(){ $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow"); }, myCallback()); function myCallback(){ //Do what ever you want to happen after //the div creationin this function } 

我认为应该这样做

Interesting Posts