情况有点像-
var someVar = some_other_function();
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
问题是someVar
的值在addEventListener
的侦听器函数中不可见,在那里它可能被视为一个新变量。
发布于 2008-11-02 10:51:50
你所写的代码绝对没有任何错误。some_function
和someVar
都应该是可访问的,以防它们在匿名的上下文中可用
function() { some_function(someVar); }
被创建了。
检查警报是否给出了您一直在寻找的值,确保它在匿名函数的作用域中是可访问的(除非您有更多的代码在addEventListener
调用旁边的同一个someVar
变量上操作)
var someVar;
someVar = some_other_function();
alert(someVar);
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
发布于 2012-08-16 20:14:11
为什么不直接从事件的target属性中获取参数呢?
示例:
const someInput = document.querySelector('button');
someInput.addEventListener('click', myFunc, false);
someInput.myParam = 'This is my parameter';
function myFunc(evt)
{
window.alert(evt.currentTarget.myParam);
}
<button class="input">Show parameter</button>
记住,JavaScript是一种面向原型的语言!
发布于 2013-05-17 03:29:21
这个问题很老了,但我想我应该为后人提供一个使用es5的.bind()
的替代方案。:)
function some_func(otherFunc, ev) {
// magic happens
}
someObj.addEventListener("click", some_func.bind(null, some_other_func), false);
只需注意,您需要将第一个参数作为传递给bind (另一个函数)的参数设置侦听器函数,第二个参数现在是事件(而不是原来的第一个)。
https://stackoverflow.com/questions/256754
复制相似问题