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

时间:2011-06-05 11:30:03

标签: php javascript jquery

我想只在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 "<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,并应触发新的jQuery函数。

14 个答案:

答案 0 :(得分:10)

这就是我要解决这个问题的方法,假设我已正确理解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");                       
         }
        });
});

答案 1 :(得分:5)

尝试将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");});'; 
?>

答案 2 :(得分:4)

您可以使用livequery plugin

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

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

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

答案 3 :(得分:4)

为什么不将您的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>";

这应该有用。

答案 4 :(得分:3)

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

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>"; ?>

答案 5 :(得分:3)

这就是你所要求的:

(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。

快乐的编码。

答案 6 :(得分:2)

保持jquery live-click-function,因为它是

&安培;在php中运行以下代码

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

答案 7 :(得分:2)

将直播事件绑定到由文档触发的自定义事件:

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

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

<强>参考

答案 8 :(得分:2)

    $.ready(function(){
     $("#wrapper").add("div").attr('id','PP_end_show');

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

});


<div id='wrapper'>

</div>  

答案 9 :(得分:1)

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

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

答案 10 :(得分:1)

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

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

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

答案 11 :(得分:0)

它必须是那个确切的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.
}

答案 12 :(得分:0)

试试这个,

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

答案 13 :(得分:-4)

使用回调函数。 它是一个在您的事件处理后立即触发的功能。 所以对于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
}

而且我认为应该这样做