Настройка списков событий в приватных функциях - PullRequest
1 голос
/ 14 июня 2011

Мой случай:

    function C() {
            this.create = function() {
                    var div=document.createElement("div");
                    div.setAttribute("onclick","alert('this works')");
                    div.onclick=function(){
                            alert("this doesnt work");
                    }
                    document.appendChild(div);
            }
            this.create();
    }
    var x = new C();

Разве невозможно установить событие onclick таким образом в javascript? Должна ли вызываемая функция определяться глобально ??? Я могу понять проблему, что она не определена глобально. Но я хочу использовать закрытые переменные внутри функции, где я определяю событие onclick. Любые предложения ??????

Ответы [ 2 ]

1 голос
/ 14 июня 2011

То, что вы опубликовали, почти правильно .Добавьте элемент ко всему, кроме document, например: document.body.Не устанавливайте обработчики событий с setAttribute, потому что он глючит.Вы можете использовать свойство onclick или стандартный метод W3C addEventListener (attachEvent в IE).

function C() {
    this.create = function() {
        var div = document.createElement("div");
        div.innerHTML = "click me";
        var inner = "WORKS!";
        div.onclick = function(){
            alert(inner); // private variable is ok
        };
        document.body.appendChild(div);
        div = null; // avoid memory leak in IE
    };
    this.create();
}
var x = new C();
0 голосов
/ 14 июня 2011

А как же

div.addEventListener('click', function() {
    alert('hello!');
}, false);

Таким образом, функция анонимна и видна только в той области, в которой вы ее объявляете. Это не глобально.

Вот несколько документов API по addEventListener: https://developer.mozilla.org/en/DOM/element.addEventListener

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...