Аргументы обработчика событий JavaScript - PullRequest
7 голосов
/ 14 июля 2010

У меня есть следующий код 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.Происходит событие onclick , когда элемент создается, а аргументы, переданные в myFunction , равны нулю.После добавления элемента в DOM событие onclick не срабатывает, если выбран переключатель.

Буду признателен, если кто-нибудь поймет, что здесь происходит, и / или как можно динамически добавлять обработчики событий.

1 Ответ

12 голосов
/ 14 июля 2010

Вам нужно дать ссылку на функцию 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);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...