我试图通过使用for循环动态地创建具有唯一侦听器和处理程序的按钮,但不幸的是,由于只有最后一个按钮的作用,我必须做错事情。 更令人惊讶的是,点击最后一个按钮,而不是“按钮3号”,当它返回“按钮四号”我如何在javascript中动态创建事件和事件处理程序
贝娄的代码,这里是一个的jsfiddle http://jsfiddle.net/y69JC/4/
HTML这样的事实:
<body>
<div id="ui">
some text ...
</div>
</body>
的Javascript:
var uiDiv = document.getElementById('ui');
uiDiv.innerHTML = uiDiv.innerHTML + '<br>';
var results = ["Button one","Button two","Button three","Button four"];
for(var n=0;n<results.length;n++)
{
uiDiv.innerHTML = uiDiv.innerHTML + '<button id="connect'+n+'">option'+n+':'+results[n]+'</button><br>';
var tempId = document.getElementById('connect'+n);
tempId.addEventListener('click', function(){console.log("Button No."+n)}, false);
}
谢谢!
是的,你可以做到这一点,但我觉得这可能不是在IE <9工作示例,请参阅[这个小提琴](http://jsfiddle.net/7pHkw/)。基本上,它涉及到使用[bind()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects /功能/绑定?redirectlocale = EN-US&redirectslug = JavaScript的%2FReference%2FGlobal_Objects%2FFunction%2Fbind)。 – kamituel
我在jsfiddle上试过你的代码,它不工作...我修改了它,使其通过将EventListener更改为:tempId.addEventListener('click',(function(n2){return function(){ console.log(“Button No。”+ n2)}})(n),false);但它像我的代码一样工作......任何想法? [jsfiddle](http://jsfiddle.net/y69JC/5/) – Manolis
@Manolis - 你使用什么浏览器?顺便说一句,我的答案仍然有效,它回答你的原始问题 - 我不明白你为什么删除了“接受”的标志。 – kamituel