如何将变量内容传递给动态创建的onclick函数?
解决动态修改onclick属性时变量内容传递的问题
我来帮你搞定这个动态设置onclick的问题~你遇到的核心麻烦是旧代码把变量名文本传给了函数,而不是变量的实际内容,接下来我们一步步拆解优化:
旧代码的问题分析
你的旧代码里:
b.onclick = function () { onClickFill(ocstr); };
这里的ocstr是作为变量名传递的,当用户点击元素时才会去查找这个变量的值,而不是你赋值onclick时的那个固定内容。而且还多了一层onClickFill函数,完全可以简化掉。
更简洁的优化方案
我们可以直接利用闭包特性,把ocstr的当前值"封装"到onclick函数里,不用额外的辅助函数,也不会出现变量名传递的问题:
方案1:普通函数闭包
// 先处理好ocstr的内容 var ocstr = b.onclick.toString().replace(/to=.*/, tostr.slice(0, -1) + "';").slice(43).slice(0,-4); // 直接赋值onclick为跳转函数 b.onclick = function() { location.href = ocstr; };
方案2:箭头函数简化写法
如果你的环境支持ES6语法,还可以更简洁:
var ocstr = b.onclick.toString().replace(/to=.*/, tostr.slice(0, -1) + "';").slice(43).slice(0,-4); b.onclick = () => location.href = ocstr;
关于你新代码的补充说明
你用new Function的思路是可行的,但要注意字符串拼接的转义风险:如果ocstr里包含单引号,会直接导致函数语法错误。而上面的闭包写法就没有这个问题,因为是直接引用变量的实际值,不需要拼接字符串。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

