我已经从数组中构建了一个动态列表,并且必须以内联方式打印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?
OR
如何重新编写此内容以使调用不是内联的?
答案 0 :(得分:3)
最简单的答案是:使用json_encode()将数组转换为json字符串,但无论如何它都不是好习惯。
答案 1 :(得分:2)
因为您正在尝试打印数组,就像自动将其自身转换为javascript数组一样,即,用逗号分隔的值的字符串(这是它需要输出到html的内容,浏览器可以理解)。
为此你需要implode:
string implode(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字符串。最终结果如下:
//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>
请记住,PHP和Javascript彼此不了解。