簡體   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