从PHP循环调用Javascript函数

时间:2018-08-01 16:00:37

标签: javascript php

大约一个小时以来,我一直在网上寻找有关此问题的答案,并根据这些答案进行尝试(我知道这类问题经常会出现)。但是,我正在尝试的一切都没有。因此,首先进行解释:

我正在遍历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函数,或者长时间盯着它看后,对我而言确实确实不明显。这不应该那么困难,我敢肯定,我确实有一些非常明显的错误,只要有人看了一下代码,就会有人看到,但是完全让我回避。

2 个答案:

答案 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
..
?>