Передача выражения функции для использования в качестве обработчика нажатия кнопки

Для кнопки мне нужно установить функцию, которую она вызывает, и значение, используемое в этом вызове, во время выполнения. Я могу сделать это так:

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 и работает в другом браузере. Таким образом, вы должны рассмотреть обе эти функции, чтобы обеспечить кросс-браузерную поддержку.

Другие вопросы по тегам