Передача выражения функции для использования в качестве обработчика нажатия кнопки - PullRequest
1 голос
/ 03 декабря 2011

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

var myfunction = /* ... */
var myvalue = /* ... */
button.setAttribute ("onclick", myfunction + "('" + myvalue + "')");

Если я попытаюсь вместо этого:

button.setAttribute ("onclick", function () { myfunction(myvalue));

Firebug дает мне

"оператор функции требует имени"

хотя, насколько мне известно, я использую здесь выражение функции.

Ответы [ 3 ]

3 голосов
/ 03 декабря 2011
button.onclick = function() {
    myfunction(myvalue);
}

Использование правильного метода регистрации событий было бы лучше, хотя бы:

button.addEventListener('click', function() {
    myfunction(myvalue);
}, false);
0 голосов
/ 03 декабря 2011

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

0 голосов
/ 03 декабря 2011

Вам не хватает закрывающей скобки.

button.setAttribute ("onclick", function () { myfunction(myvalue));

должно быть

button.setAttribute ("onclick", function () { myfunction(myvalue); });

Но вы, вероятно, не хотитечтобы использовать setAttribute для установки нажатия кнопки, попробуйте button.onclick = function () { myfunction(myvalue); }; вместо

...