1

** 编辑 **

恐怕我的方向不对——问题不是我问的。Javascript 可以正常工作,它是 PHP 在第一次“运行”时没有显示我想要的内容 - 我仍然不确定为什么。抱歉有点浪费您的时间...

**

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

<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 仅在刷新后才有效。

4

9 回答 9

5

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

一定是您的服务器在刷新前后发送了不同的 HTML。我建议,如果您保存第一次获得的页面来源,并将其与刷新后获得的来源进行比较。我敢打赌,您会发现其中的差异,并且会告诉您哪里出了问题。

于 2009-05-24T15:17:07.537 回答
2

JQuery 做到了这一点。页面呈现后,以下内容中的任何内容都将执行:

$(document).ready(function() {
  //Call your function here
});
于 2009-05-24T15:18:14.477 回答
0

尝试“延迟”属性。

于 2009-05-24T15:19:23.773 回答
0

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

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

于 2009-05-24T15:27:24.070 回答
0

非 JS 库的答案是:

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

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

您将<script>积木放在身体末端的权利。这提高了页面加载性能,因为浏览器在遇到阻塞时会<script>阻塞。

于 2009-05-24T15:29:16.000 回答
0

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

于 2009-05-24T16:21:06.733 回答
0

我建议您将内容添加到输出变量中,然后在文件末尾回显它。前任:

...
$output .= '<body onload="runFunction();">';
while(...)
{
   $output .= '...';
}
$output .= '</body>';
...
echo $output;
于 2009-05-24T16:35:09.867 回答
0

恐怕我的方向不对——问题不是我问的。Javascript 可以正常工作,它是 PHP 在第一次“运行”时没有显示我想要的内容 - 我仍然不确定为什么。抱歉有点浪费您的时间...

于 2009-05-25T13:35:27.000 回答
0

I know this is really late for this post, but the reason this isn't working is that PHP renders HTML and then you can't interact with it again (unless you can do some snazzy AJAX stuff). Point being that the JS works fine bc it is client side, PHP doesn't work bc it is server side. Hope that helps anyone else who comes here!

于 2015-02-04T07:30:28.423 回答