如何在页面加载后触发Javascript功能?

时间:2009-05-24 15:09:58

标签: php javascript html events onload

**编辑**

我担心我的方向不正确 - 这个问题不是我所问的问题。 Javascript可以正常工作,它是PHP没有显示我想要的东西 在第一次“奔跑” - 我不知道为什么。 对不起有点浪费你的时间......

**

我的表单可能包含或可能不包含其字段中的数据。 如果用户到达表单并且他已经在系统中有一些数据, 例如,他的ID号将出现在ID字段中 - 并且正在运行JavaScript函数 onLoad将禁用输入字段并更改其样式:

<body onload="runFunction()">

问题是它似乎在PHP发挥作用之前运行, 只有当我刷新页面时,JS函数才会执行我想要的所有操作 (它禁用并设置一些依赖于PHP条件的其他表单字段。)

有没有办法让这个JS函数在页面呈现后运行? 我在关闭页面之前尝试运行它:

<body>
...
...
<script>
runFunction();
</script>
</body>
</html>

但无济于事。

任何想法? 谢谢!

一些相关的PHP代码:[我删除了id属性以使阅读更容易]

<?php if ($h_phone != '' && $h_phone_pre != '') {  
echo "<td class=\"input\"><input type=\"text\" id=\"new_user_home_tel\" value=\"$h_phone\" size=\"8\" maxlength=\"7\" disabled=\"disabled\" /> -  
<select id=\"new_user_home_tel_pre\" disabled=\"disabled\">  
  <option value=\"$h_phone_pre\" selected=\"selected\"></option>";

     } else {

echo '<td class="input"><input type="text" id="new_user_home_tel" size="8" maxlength="7" /> -  
 <select id="new_user_home_tel_pre">  
   <option value=" " selected="selected"></option>';
    }?>  <option value="02">02</option>
     <option value="03">03</option>
     <option value="04">04</option>
     <option value="08">08</option>
     <option value="09">09</option>
</select> 
</td>   

如果字段不为空且可行,Javascript代码只会更改样式, 但PHP只在刷新后才能工作。

9 个答案:

答案 0 :(得分:5)

您的Javascript在页面加载后运行,问题出在其他地方。

必须是您的服务器在刷新之前和之后发送不同的HTML。我建议如果您保存第一次获得的页面源,并将其与刷新后获得的源进行比较。我打赌你会发现差异,这会告诉你什么是错的。

答案 1 :(得分:2)

JQuery这样做。呈现页面后,将执行以下内容:

$(document).ready(function() {
  //Call your function here
});

答案 2 :(得分:0)

尝试“延迟”属性。

答案 3 :(得分:0)

一种方法是在PHP中输出缓冲页面。这意味着生成的所有内容都会进入内存,直到脚本完成运行,然后它们全部被发送出去。

查看http://uk.php.net/ob_start

答案 4 :(得分:0)

非JS库的答案是:

<script>
window.onload = function(){
 /* do stuff */
}
</script>

然而,使用像JQuery这样的JS库会处理所有那些麻烦的跨浏览器错误/问题。

您有权将<script>块放在身体的尽头。当浏览器访问<script>块时,这会提高页面加载性能。

答案 5 :(得分:0)

绝对hacky,但你总是可以在你的表单下面放一个2x2透明图像,并使用它的onLoad运行该功能。我在条件包含的文件上做了类似的事情,因此在没有包含文件的情况下没有错误。

答案 6 :(得分:0)

我建议您将内容添加到输出变量,而不是在文件末尾回显它。例如:

...
$output .= '<body onload="runFunction();">';
while(...)
{
   $output .= '...';
}
$output .= '</body>';
...
echo $output;

答案 7 :(得分:0)

我担心我的方向不正确 - 这个问题不是我所问的问题。 Javascript按原样运行,它是PHP在第一次“运行”时没有显示我想要它的东西 - 我不知道为什么。对不起有点浪费你的时间......

答案 8 :(得分:0)

我知道这篇文章的发布时间已经很晚了,但是这不起作用的原因是PHP呈现HTML然后你再也无法与它进行交互(除非你可以做一些时髦的AJAX东西) 。重点是JS工作正常bc它是客户端,PHP不工作bc它是服务器端。希望能帮到其他任何人来这里!