Php 如何仅在加载div时运行函数?
我只想在加载div时运行函数 当我加载页面时,会加载许多文件。在列表的末尾,PHP回显一个div。当显示这个div时,jQuery应该运行一个函数 我可以通过单击事件来实现这一点,但我希望它能够自动工作,而无需按下按钮 这就是它的工作原理: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")
$("#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)
}
}