向表单添加数组元素时报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里的双引号转义为",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
相关产品推荐
相关产品推荐

