JavaScript事件处理程序参数

时间:2010-07-14 18:14:28

标签: javascript javascript-events

我有以下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 事件。

如果有人能够深入了解这里发生的事情,和/或如何动态添加事件处理程序,我将不胜感激。

1 个答案:

答案 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);
};