Передача выражения функции для использования в качестве обработчика нажатия кнопки
Для кнопки мне нужно установить функцию, которую она вызывает, и значение, используемое в этом вызове, во время выполнения. Я могу сделать это так:
var myfunction = /* ... */
var myvalue = /* ... */
button.setAttribute ("onclick", myfunction + "('" + myvalue + "')");
Если я попробую вместо этого:
button.setAttribute ("onclick", function () { myfunction(myvalue));
Firebug дает мне
"оператор функции требует имени"
хотя, насколько я знаю, я использую здесь выражение функции.
3 ответа
button.onclick = function() {
myfunction(myvalue);
}
Использование правильного метода регистрации событий было бы лучше, хотя:
button.addEventListener('click', function() {
myfunction(myvalue);
}, false);
Вам не хватает закрывающей скобки.
button.setAttribute ("onclick", function () { myfunction(myvalue));
должно быть
button.setAttribute ("onclick", function () { myfunction(myvalue); });
Но вы, вероятно, не хотите использовать setAttribute для установки нажатия кнопки, попробуйте button.onclick = function () { myfunction(myvalue); };
вместо
Если вы рассматриваете чистый JavaScript:
function attachEvent(element, event, handler)
{
if (element && element.attachEvent) {
element.attachEvent("on" + event, handler);
}
else if (element && element.addEventListener) {
element.addEventListener(event, handler, false);
}
}
ИСПОЛЬЗОВАНИЕ:
attachEvent(button, "click", myFunction);
Пожалуйста, обратите внимание, IE требует attachEvent
а также addEventListener
не работает в IE и работает в другом браузере. Таким образом, вы должны рассмотреть обе эти функции, чтобы обеспечить кросс-браузерную поддержку.