大约一个小时以来,我一直在网上寻找有关此问题的答案,并根据这些答案进行尝试(我知道这类问题经常会出现)。但是,我正在尝试的一切都没有。因此,首先进行解释:
我正在遍历PHP中的表(在while循环中),并且需要为表返回的行集中的每个记录调用JavaScript函数。为了尝试入门,我有一个超级基本的功能,只是让我知道我叫它……这是行不通的。这是PHP代码(使用DIV标签的原因是,我最终想从我知道怎么做的JS代码中替换DIV的innerHTML,并且已经在其他地方这样做了……):
// the loop:
while( $row = mysqli_fetch_array( $heralds_result ) )
{
$herald_id = $row["roster_id"];
$sca_name = $row["sca_name"];
// create a div for each herald as we go with its' own name (using id ...)
echo " <div id='" . $herald_id . "'>\n";
echo " " . $sca_name . "\n";
echo " <script type='text/javascript'>test();</script>\n";
echo " </div>\n";
}
这是JavaScript代码(位于文件底部):
<script type="text/javascript">
function test()
{
alert( "Test function" );
}
</script>
但是,我没有“警告”对话框,只是文本流了出来。所以对于第一行,我得到:
<div id='1'>
Aasa Thorvaldsdoittr
<script type='text/javascript'>test();</script>
</div>
由于未显示警报对话框,因此它告诉我未调用Javascript函数,或者长时间盯着它看后,对我而言确实确实不明显。这不应该那么困难,我敢肯定,我确实有一些非常明显的错误,只要有人看了一下代码,就会有人看到,但是完全让我回避。
答案 0 :(得分:2)
“文件底部的JavaScript代码”
是问题所在。将脚本添加到DOM后立即运行。事物按照它们在HTML中给出的顺序添加到DOM中。
因此,添加了尝试调用您的函数的脚本标签-并执行了-之前添加了实际上包含该函数的脚本标签。因此,他们尝试执行尚不存在的功能。如果您在浏览器的控制台(在开发人员工具中)中查看,您可能会因抱怨而出错。
简单的解决方案是在试图使用HTML的代码之前,在HTML中的 之前声明包含函数的脚本标签。
顺便说一句,知道您打算在实际中使用此功能做什么是很有趣的-考虑是否可以通过使用PHP创建一些标记直接实现相同的效果,而不是在页面启动时释放大量的JS正在加载。
答案 1 :(得分:1)
您应该将函数声明移到使用的位置上方。例如:
<script type="text/javascript">
function test()
{
alert( "Test function" );
}
</script>
..
<?php
..
// your loop
..
?>
或
<?php
..
echo '<script type="text/javascript">
function test()
{
alert( "Test function" );
}
</script>';
..
// your loop
..
?>