JavaScript中如何访问bind传递的额外参数?循环绑定问题解析
解决循环中绑定点击事件传递answerNumber的问题
你当前的问题出在Function.bind()的使用上:bind的第一个参数是用来指定函数执行时的this指向,不是要传递的参数。你直接传answerNumber,相当于把它当成了_continueOnClick的this,再加上循环里的answerNumber会因为作用域共享导致最终所有点击都拿到最后一次的值,所以函数里直接访问answerNumber会失败。
下面给你几种可行的解决方法:
方法1:用bind正确传递参数
先绑定函数的this(比如当前实例的this),再把answerNumber作为后续参数传递:
// 循环内的绑定代码 btn.find("a").data(this.key, option.slide).bind("click", this._continueOnClick.bind(this, answerNumber));
修改_continueOnClick接收参数(注意:bind传的参数会排在事件对象e前面):
_continueOnClick: function (answerNumber, e) { console.log(answerNumber); // 现在能拿到对应循环次的数值 }
方法2:用闭包保存循环变量
在循环内部用立即执行函数包裹,把当前循环的answerNumber存进闭包,避免作用域共享问题:
// 循环内部执行这段代码 (function(currentNum) { btn.find("a").data(this.key, option.slide).bind("click", function(e) { this._continueOnClick(currentNum, e); }.bind(this)); })(answerNumber);
对应的_continueOnClick写法和方法1一致,接收currentNum参数即可。
方法3:用jQuery的data存储值
把answerNumber存在绑定点击事件的元素上,点击时从元素的data里读取:
// 绑定的时候存入data btn.find("a") .data(this.key, option.slide) .data('answerNum', answerNumber) // 新增存储answerNumber .bind("click", this._continueOnClick.bind(this));
然后在函数里通过事件目标元素获取:
_continueOnClick: function (e) { const answerNumber = $(e.currentTarget).data('answerNum'); console.log(answerNumber); }
内容的提问来源于stack exchange,提问作者mcool
相关产品推荐
相关产品推荐

