javascript - 我可以传递一个对象作为 onClick 函数的参数吗
问题描述
我目前正在尝试为调用单独函数并传递使用对象作为此函数的参数的按钮创建 onclick 事件。
我的代码如下所示:
async function getJourneyAwait(){
const routes = await getJourney();
var innerHTML = " ";
if(!(routes === null)) {
for (var i = 0; i < routes.length; i++){
console.log(routes[i])
console.log(typeof(routes[i]))
var route = routes[i]
innerHTML += '<p> Route ' + i+1 + ': <button onClick=startJourney(' + route + ')>Start Trip</button></p>'
}
document.getElementById('tripmessage').innerHTML = innerHTML;
}
}
function startJourney(route){
console.log(route);
}
当我尝试单击 Start Trip 按钮时,我收到一条错误消息: Uncaught SyntaxError: Unexpected end of input at .(index):1
当我检查按钮元素时,参数似乎存在某种错误,因为元素如下:
<button onclick="startJourney([object" object])="">Start Trip</button>
我尝试了多种不同的方法,在某些情况下,我已经能够运行该函数,但是当我执行所有记录到控制台的操作时,这些都是未定义的。例如,如果我删除“路由”任一侧的加号和引号,该函数运行但未定义被记录到控制台。
解决方案
[object object]
您看到的是将对象转换为字符串格式的结果route
。
我建议以下两种方法之一:
- 使用 创建按钮元素
createElement
,使用 将 startJourney 函数分配给 onclick 属性button.onclick = function() { createJourney(route) ]}
并将其附加到父元素。 - 向按钮元素添加 id 并使用添加单击事件侦听器
addEventListener("click", createJourney(route))
编辑:正如@Teemu 所指出的,如果您使用选项#1,则必须替换var i = 0
为,let i = 0
因为在具有基于 let 的索引的循环中,通过循环的每次迭代都会有一个具有循环范围的新变量 i 。
推荐阅读
- wordpress - Woocommerce 不同类别的总和为批量价格
- google-workspace - Google 归档用户和暂停用户之间的区别
- .net - 可以通过异步函数过滤 Blazor 数据网格吗?
- python - 使用 Python Google Cloud Storage/Bigquery 客户端库上传非常慢
- google-apps-script - 谷歌文档
.HORIZONTAL_ALIGNMENT == "Center" 返回 false,但说 "Center" - sql - 在 postgres 中,如何为列中的所有选定文本替换或添加前缀/后缀?
- reactjs - ReferenceError: selectedView 不是从 React 中的 Jest 测试中定义的
- sql - 所有行上所有出现的计数
- python - 如何计算斜率并在多索引数据帧之间进行操作?
- python - 使用 BCPG 公钥时 PGPy 抛出错误