You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将变量内容传递给动态创建的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:27:19