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

时间:2015-08-20 21:37:38

标签: javascript php jquery arrays

我已经从数组中构建了一个动态列表,并且必须以内联方式打印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

如何重新编写此内容以使调用不是内联的?

2 个答案:

答案 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彼此不了解。