在动态创建的元素中包含参数的事件处理程序
Event handler with parameters in dynamically created elements
当我分配不带参数的事件处理程序时,它工作:http://jsfiddle.net/mUj43/
function show(){
alert('work');
}
var myButton = document.createElement("input");
myButton.type="button";
myButton.value="click";
myButton.onclick=show;
var where = document.getElementById("where");
where.appendChild(myButton);
但是如果我传递参数,它不起作用:http://jsfiddle.net/mUj43/1/
myButton.onclick = show('test');
如何在动态创建的元素中使用带有参数的函数?
你不能这样做,你可以通过创建一个新函数来使用部分应用程序,然后将其附加为事件处理程序:
myButton.onclick=show.bind( myButton, 'test');
http://jsfiddle.net/mUj43/2/
文档(我建议您阅读,因为此功能对许多其他事情也很有用)和兼容性信息:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
你必须创建自己的闭包:
myButton.onclick = function () {
show.call(this, 'test');
};
您也可以使用 @Esailija 的 bind
方法,但这种方法具有更深入的浏览器支持。
尝试:
myButton.onclick = function(){show("test");}
或:
myButton.onclick = function(){ show.call( this, "test");}
如果要在 show 函数中保留元素对象上下文
这是因为当您添加事件时,您需要一个函数引用。
在第一个示例中,show
是对函数的引用。
在第二个示例中,show('test')
是对函数 show
的调用,它不返回任何内容,并且 Nothing 不是函数引用。
这就是为什么当您加载页面时,它会提醒"工作"(调用该函数),但是当您单击该按钮时,不会调用任何函数。
然后,您需要一个函数。
您可以声明它:
myButton.onclick=f;
function f(){
show('test')
}
或者您可以使用匿名的:
myButton.onclick=function(){
show('test')
}
相关文章:
- 检查事件处理程序参数
- 带有参数的Javascript事件处理程序
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 将作用域绑定到事件处理程序,但保留原始参数
- 将参数传递给函数,同时保留事件处理程序
- 在动态创建的元素中包含参数的事件处理程序
- JS:删除带有接受参数的处理程序的事件侦听器
- 将参数传递给jQuery中的事件处理程序
- 如何将对象参数传递给事件处理程序
- 如何在事件处理程序中包含函数(及其参数),而不在页面加载时调用该函数
- 如何使用函数作为事件处理程序,以及如何使用参数直接调用函数
- 将其他参数传递给事件处理程序
- 在 .on('click') 事件处理程序中传递函数和函数参数
- 将参数从闭包传递给事件处理程序
- 当函数绑定在构造函数中时,如何在 ES6 React 中向事件处理程序添加参数
- 作用域和将参数传递给动态创建的事件处理程序时出现问题
- 在 HTML 中传递多个参数鼠标悬停事件处理程序
- 如何将参数传递到事件处理程序中以使其唯一
- 向事件处理程序函数添加参数
- "这个“;当我向事件处理程序函数添加参数时会发生更改