javascript - 动态生成的列表中的匿名函数产生 SyntaxError
问题描述
我想在动态生成的列表中放置一个 onclick 事件。我不能按原样使用它,比如updateRoomID(arg)
,因为它会立即触发。所以我把它放在一个匿名函数中,正如网上各种消息来源所建议的那样:function (){updateRoomID(arg)}
. 但这会导致:“Uncaught SyntaxError: Unexpected token (”。开发人员工具说问题出在function()
.
它所在的代码部分:
socket.onmessage = function(event) {
var msg = JSON.parse(event.data);
for (let i = 0; i < msg.length; i++) {
if (msg[i].beingserved == false) {
listRooms.innerHTML += '<li id=' + msg[i].roomid +
// Problem on following line.
' onclick=' + function () { updateRoomID(msg[i].roomid) } +
'>' +
'<a href="#">' +
msg[i].roomid +
'</a></li>';
} else {
document.getElementById(msg[i].roomid).remove();
};
};
};
我已经尝试使用该函数作为引号内的字符串:<li id=' + msg[i].roomid +' onclick="function(){updateRoomID(msg[i].roomid)}">'
。我尝试将 onclick 处理程序放在 href 链接中,并将其替换为 addEventListener。但是我在这些尝试中遇到了同样的错误。
如果我尝试function(){updateRoomID(arg)}()
使用后面的括号,它会按预期立即触发。
我整天都在看它,无法弄清楚语法错误在哪里。我对 JavaScript 很陌生。我究竟做错了什么?
解决方案
您不能在onclick
属性中放置函数。它包含应执行的 JavaScript 源代码。
在这种情况下,您应该做的是将函数调用作为字符串,但替换为参数的值。
使用模板文字使这更容易。
listRooms.innerHTML += `
<li id="${msg[i].roomid}" onclick="updateRoomId(${msg[i].roomid})">
<a href="#">${msg[i].roomid}</a>
</li>`;
推荐阅读
- sql - 从另一个积云中具有多个值的列中选择值
- android - 如何修复android studio中的资源链接问题
- java - Oracle DB - Java 对特定批次的未初始化集合的引用
- php - 将 SQS 与多个 Laravel 队列读取器一起使用时出错
- angular - 有条件地在父组件中显示多个子组件
- c# - NullReferenceException 异步等待
- angular6 - 所有文本框的单个元素引用
- java - 如何在 Jhipster 中配置热重载?
- angular - 使用 Angular 7 使用 HTTP API 进行 POST 和命令错误标头丢失
- c# - Identity Server 4 强制注销用户