You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向表单添加数组元素时报Uncaught SyntaxError: missing ) after argument list错误

问题根因

你遇到的语法错误是JSON输出的双引号与外层onclick属性的双引号冲突导致的:
onclick属性用双引号包裹,而json_encode()默认输出带双引号的JSON字符串,HTML解析器遇到JSON里的第一个双引号时,就会误以为onclick属性已经结束,直接把后续内容解析为普通HTML属性,最终导致JS代码被截断、语法报错。你在Chrome里看到的渲染后的错乱代码就是这个原因导致的。

解决方法

方案1(最小改动)

对PHP输出的JSON内容做HTML转义,避免特殊字符破坏属性结构:
把你的按钮代码里的这一行:

multiple_addfield(document.formenviar, <?php echo json_encode($this->previousShow); ?>);

修改为:

multiple_addfield(document.formenviar, <?php echo htmlspecialchars(json_encode($this->previousShow), ENT_QUOTES); ?>);

htmlspecialchars配合ENT_QUOTES参数会把JSON里的双引号转义为&quot;,HTML解析时会自动还原为双引号传给JS,不会再触发属性截断问题。

方案2(更规范的写法)

避免内联写JS逻辑,把参数存到data属性中,单独绑定点击事件:

<a class="btn-get-started i18n-back" type="button" id="btn-back" 
   data-params='<?php echo json_encode($this->previousShow); ?>'>
   Volver
</a>

<script>
document.getElementById('btn-back').addEventListener('click', function() {
  const params = JSON.parse(this.dataset.params);
  crearform('formenviar','post');
  multiple_addfield(document.formenviar, params);
  enviaform(document.formenviar);
});
</script>

这种写法完全规避了属性引号冲突的问题,代码可维护性也更高。

额外提示

你渲染后的代码里controller键名前多了一个空格,建议检查下存储POST栈的逻辑,避免后续因为键名不匹配导致参数读取失败。

内容的提问来源于stack exchange,提问作者Sr.Lowe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:06:09