forEach中setAttribute绑定onClick传参时报错Missing ( after argument list
错误原因
你的element.startTime是字符串格式的时间(比如09:00),拼接onclick属性值的时候没有给字符串参数加引号,导致最终生成的代码里bookTimeslot(3,09:00)不符合JS语法规范:09:00不会被识别为字符串,其中的冒号会被解析为语法符号,JS解析器无法识别该结构,才会抛出「缺失括号」的语法错误。
修复方案
方案1:补全字符串参数的引号(最简单适配现有写法)
拼接onclick字符串时给字符串类型的参数包裹单引号,注意用反斜杠转义:
scheduleChild.setAttribute('onClick','bookTimeslot('+id_provider+',\''+element.startTime+'\')')
修改后生成的HTML属性会变成onclick="bookTimeslot(3,'09:00')",语法合法可以正常执行。
方案2:用addEventListener绑定事件(更推荐)
不要用字符串拼接的方式写行内onclick,直接通过事件监听绑定,既避免转义问题,也更符合现代JS开发规范,闭包可以直接拿到遍历过程中的element和id_provider值:
// 替换原来的setAttribute('onClick', ...) 行 scheduleChild.addEventListener('click', () => { bookTimeslot(id_provider, element.startTime) })
方案3:从元素自定义属性取参数
你已经把时间存在了元素的data-*属性里,也可以在触发事件时直接从当前元素取对应值:
scheduleChild.addEventListener('click', function() { // 注意dataset会自动把横杠格式的属性名转为全小写 bookTimeslot(id_provider, this.dataset.starttime) })
内容的提问来源于stack exchange,提问作者Pax
相关产品推荐
相关产品推荐

