如何将JavaScript数组传递到PHP生成的内联函数调用中

How to pass a JavaScript array into an inline function call generated by PHP

本文关键字:函数调用 PHP JavaScript 数组      更新时间:2023-09-26

我已经从数组中建立了一个动态列表,必须内联打印onclick事件,我不知道还有其他方法可以做到这一点。

<?php
$dataArray = $_POST['dataArray']; // This is a valid array
ECHO '<div id="colorSelectorBox">';
for ($btn = 0; $btn < sizeof($dataArray); $btn++){
    ECHO '<div class="btn-group">
              <button onclick="buildGroupList("'.$dataArray.'")">' .$dataArray[$btn].'</button>
              <button><div ..Stuff..></div></button>
          </div><br>'; 
}
ECHO '</div>';
?>  

问题是,JavaScript函数buildGroupList()不接收数组,而不是行看起来像这样在我的开发人员工具:

onclick="buildGroupList(Array)"

我如何通过JavaScript传递值数组?

我如何重写这个,使调用不是内联的?

最简短的回答是:使用json_encode(),它将数组转换为json字符串,但无论如何这不是一个好的做法。

因为您试图将数组打印为自动将其转换为javascript数组,也就是说,由逗号分隔的值的字符串(这是它需要输出到html的内容,浏览器可以理解)。

你需要内爆:

字符串内爆(string $glue, array $pieces)

用$glue字符串连接数组元素

ECHO "<div class='"btn-group'">
    <button onclick='"buildGroupList(['".implode("','",$dataArray)."'])'">" .$dataArray[$btn]."</button>
         <button><div ..Stuff..></div></button>
    </div><br>";

取数组中的每个元素,并在每个元素之间放置$glue string。最终结果如下所示:

//let's assume this is your array in PHP
<?php
    $dataArray = array('one','two','three');
?>
<!-- then your HTML looks like this -->
<button onclick="buildGroupList(['one','two','three'])">...</button>