我有以下JavaScript代码:
var ans_el = document.createElement( 'input' );
ans_el.setAttribute( 'id', unique_int_value );
ans_el.setAttribute( 'type', 'radio' );
ans_el.setAttribute( 'name', 'group' );
ans_el.setAttribute( 'value', 'myValue' );
ans_el.onclick = myFunction( this.id, this.value );
// Add ans_el to DOM.
function myFunction( index, value ) { // do something }
这当然不能按预期工作。至少在Firefox 3.6中没有。当创建元素并且传递给 myFunction 的参数为null时,会触发 onclick 事件。将元素添加到DOM后,选择单选按钮时不会触发 onclick 事件。
如果有人能够深入了解这里发生的事情,和/或如何动态添加事件处理程序,我将不胜感激。
答案 0 :(得分:12)
你需要为onclick提供一个函数的引用;您当前正在执行该函数并将该结果分配给onclick处理程序。这更接近你想要的:
ans_el.onclick = function(e) {
myFunction(ans_el.id, ans_el.value);
};
更新:决定使用event.target获得一个更清晰的例子,因为Andir提出了这个例子。
ans_el.onclick = function(e) {
myFunction(e.target.id, e.target.value);
};