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

Php 如何仅在加载div时运行函数?,php,javascript,jquery,Php,Javascript,Jquery,我只想在加载div时运行函数 当我加载页面时,会加载许多文件。在列表的末尾,PHP回显一个div。当显示这个div时,jQuery应该运行一个函数 我可以通过单击事件来实现这一点,但我希望它能够自动工作,而无需按下按钮 这就是它的工作原理: $("#PP_end_show").live("click",function(){ $("#PP_head_bar").slideToggle("slow"); $("#PP_info_file_wrap").slideUp("slow")

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

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

我可以通过单击事件来实现这一点,但我希望它能够自动工作,而无需按下按钮

这就是它的工作原理:

$("#PP_end_show").live("click",function(){
    $("#PP_head_bar").slideToggle("slow");
    $("#PP_info_file_wrap").slideUp("slow");
}); 
这是PHP响应的
div

 <?php echo "<div id=\"PP_end_show\"></div>"; ?>

输出在AJAX调用后生成:

<form id="PP_search_input" method="post" name="search_ID" ONSubmit="xmlhttpPost('PP_search_stream_client.php', 'PP_search_input', 'PP_thumb_output', '<img src=\'images/wait.gif\'>');return false;  ">
        <input name="search_string" type="text" class="PP_input" id="search_string" value="<?php echo $_POST['search_string']; ?>"/>
        <button type="submit" class="PP_submit" id="search_submit"> search </button>


是不是一定要是那个div?在我看来,您应该在加载文档时执行该函数。这样您就知道所有元素都已加载

$(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.
}
使用回调函数。 它是一个功能,一旦你的事件得到处理就会被触发。 因此,对于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
}
我认为这应该可以解决问题,你可以使用

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

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

当选择器(
#PP_end_show
)中的元素添加到JS中的DOM中时,函数中的代码将执行,请将要在函数中执行的代码包装起来。i、 e

function showInfoBlock() {
    $("#PP_head_bar").slideToggle("slow");
    $("#PP_info_file_wrap").slideUp("slow");
}
在PHP中,在写出PP_end_show div之后,写出调用该函数所需的JS

<?php echo "<div id=\"PP_end_show\"></div><script>$(function() { showInfoBlock(); })();</script>"; ?>

假设我正确理解表单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");                       
         }
        });
});

这符合您的要求:

(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

快乐编码。

Jason Brumwell输入正确答案,也可以使用JQuery的
$when
功能


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

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

<?php echo "<div id=\"PP_end_show\"></div>"; ?>

那就试试这样的smth

<?php 
    echo "<div id=\"PP_end_show\"></div>"; 
    echo '$(function(){$("#PP_head_bar").slideToggle("slow");';
    echo '$("#PP_info_file_wrap").slideUp("slow");});'; 
?>

为什么不将javascript与DIV代码一起回显

您可以使用PHP响应Javascript,如下所示:

在您的代码之后:

<?php echo "<div id=\"PP_end_show\"></div>"; ?>

写下:

echo "<script type='text/javascript'>

$('#PP_head_bar').slideToggle('slow');
$('#PP_info_file_wrap').slideUp('slow');


";
echo "</script>";
echo”
$('PP#u head_bar')。滑动切换('slow');
$('PP#info_file_wrap')。slideUp('slow');
";
回声“;

这应该是可行的。

保持jquery live click功能不变

&在php中运行以下代码

<?php 
echo "<div id=\"PP_end_show\"></div>"; 
echo "$(function(){ $(\"#PP_end_show\").click(); });"; 
?>

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

$(document).trigger('echo');

$("#PP_end_show").live("echo", function(){
  $("#PP_head_bar").slideToggle("slow");
  $("#PP_info_file_wrap").slideUp("slow");
  });
参考资料

$.ready(函数(){
$(“包装器”).add(“div”).attr('id','PP\u end\u show');
$(“#PP#u head_bar”)。滑动切换(“慢速”);
$(“#PP#u info_file_wrap”).slideUp(“慢”);
});

如果希望在加载所需的div后执行的操作绑定到一个click事件,只需在ajax请求末尾触发click,如下所示:

$.ajax({
  url:'whatever.php',
  type:'post', //guessing obviously
  success: function(data){
    $('#PP_end_show').click(); //etc
  }
});
这些人是对的,你在做这些事,伙计,试试这个

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

一旦加载了所有HTML,就会调用此事件,这将是加载最后一个div后的一瞬间。您可以在主体中的div之后插入一行javascript。这一行立即执行,div将可用,因为它位于html代码中的脚本之上。但打电话的时间会有无法估量的差异。我真的建议使用文档就绪事件处理程序,如我的回答中所示。为了弄清楚这一点。加载一个页面。同时,您还执行一个ajax请求,当请求完成时,您希望触发一个js函数吗?你的代码太落后了。太好了,像这样的赏金。但在我看来,OP是为了解释为什么下面的任何一个答案都不适用于他。另外,我想知道在过去半年里取得的任何进展。您确实意识到@Joost是PHP在到达用户(服务器端,然后将其转发)之前创建HTML的。没有“等待”PHP来创建DIV……我觉得你完全走错了方向,但我不知道是什么,因为你没有说你的最终目标是什么。但是,如果您只需要在AJAX请求完成时运行一些函数,@JasonBrumwell已经涵盖了您。我没有否决您的意见,但从jQuery1.7开始,您不再需要插件。您可以使用.live()。请参阅,您建议加载DOM元素时使用什么事件?!?!我认为“从jQuery1.7开始就被弃用”的意思是“可能不应该再使用了”。我在你的前一天给出了相同的答案。。。你得到了更多的选票。。。奇怪的
if(window.isBodyLoaded){
    try{
        $("#PP_head_bar").slideToggle("slow");
        $("#PP_info_file_wrap").slideUp("slow");
    }catch(d){
        alert(d)
    }
}