如何向klik函数传递对象而非字符串参数,是否需要闭合单引号?
问题解答
你的需求完全可以实现,不需要纠结原有代码的单引号闭合问题,核心是原写法逻辑有误。
原代码问题
你通过attr()给onclick赋值字符串内容时,filmidata.arr[i]被双引号包裹,最终点击触发时传入的只会是固定字符串,而非你期望的对象变量。就算去掉双引号,因为字符串是静态拼接的,循环场景下的变量i也无法正确绑定,触发时大概率会拿到循环结束后的最终值,无法对应到你预期的数组元素。
推荐解决方案
优先使用jQuery的事件绑定方法on()绑定点击事件,可以直接传递JS变量,不存在类型转换问题:
var r = $('<input/>').attr({ type: "button", value: "+", class: "btn btn-outline-light" }).on('click', function() { // 直接传入对象变量,无需转义引号 klik(filmidata.arr[i]); });
如果是在循环中生成元素,记得用let声明循环变量i,或者用闭包锁定每个循环的i值,避免变量提升导致的取值错误。
备选方案(不推荐)
如果你坚持要用attr设置onclick属性,可以把对象序列化后拼接到字符串中,该方案仅支持纯数据对象(不能包含函数、Symbol等不可序列化的内容):
var r = $('<input/>').attr({ type: "button", value: "+", class: "btn btn-outline-light" }).attr('onclick',`klik(${JSON.stringify(filmidata.arr[i])})`)
内容的提问来源于stack exchange,提问作者Jure Kozole
相关产品推荐
相关产品推荐

