为什么未使用Java脚本正确创建此onClick函数?

问题描述

我在调用JS函数时正在创建新的按钮,但是我认为我在作为参数传递的onclick事件处理程序中对对象进行字符串化的方式有问题:

...
var edit_button = '<button type="button" id="buttons" onclick="edit_admin_request(this,\'' + JSON.stringify(edit_admin_object) + '\')" name="edit_admin">Edit</button>';
var rowNode = myTable.row(window.rowindex).data([edit_button]).draw();
...

创建此按钮后,当我尝试单击它时,它根本不会调用edit_admin_request(this_,data_)函数

如果我尝试传递一个简单的字符串而不是一个字符串化的对象onclick="edit_admin_request(this,\'' + ["a string inside if an array"] + '\')",则可以使用edit_admin_request(this_,data_)函数

我不明白为什么会这样?!

更新: 这是我显示按钮的行(注意:我正在使用动态表,因此该行位于foreach循环内):

 <td>
   <div id="edit_button_row" class="edit_button_row">
     <button type="button" class="edit_admin" id="buttons" onclick='edit_admin_request(this,<?PHP echo json_encode($user); ?>)' name="edit_admin">Edit</button>
   </div>
 </td>

解决方法

因此,在阅读评论后,我会将发现的内容作为答案

  1. 在隐藏的单元格中添加用户名,以确保任何引号或特殊字符不会弄乱数据的传递。
    <td class="datacell"><?php echo $user["name"]; ?></td>
  2. 给单元格一个类
  3. 添加按钮,为其提供一个类
  4. 将此代码添加到页面中,其中tableID是表的ID或tbody

$("#tableID").on("click",".edit-admin",function(e) { 
  const $row = $(this).closest("tr"); 
  const data = $row.find(".datacell").text().trim(); // in case the PHP addes spaces
  edit_admin_request(this,data);
});