繁体   English   中英

从PHP循环调用Javascript函数

[英]Call Javascript Function from PHP in a loop

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

我正在遍历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函数,或者长时间盯着它看后,有些错误对我来说确实是不明显的。 这不应该那么困难,我确信我有一个非常明显的错误,一旦有人查看代码,就会有人看到它,但这完全使我无所适从。

“文件底部的JavaScript代码”

是问题。 将脚本添加到DOM后立即运行。 事物按照它们在HTML中给出的顺序添加到DOM中。

因此,在添加实际包含该功能的脚本标签之前 ,将添加并执行尝试调用您的函数的脚本标签。 因此,他们尝试执行尚不存在的功能。 如果您在浏览器的控制台(在开发人员工具中)中查看,则可能会有一些错误对此有所抱怨。

一种简单的解决方案是在尝试使用该功能的代码之前 ,在HTML中的某个位置声明包含该功能的脚本标签。


顺便说一句,知道您实际上打算使用此功能做什么是很有趣的-考虑您是否可以通过使用PHP创建一些标记直接实现相同的效果,而不是在页面加载时触发大量的JS。

您应该将函数声明移到比使用的更高的位置。 例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM