Javascript "это" теряет контекст в IE - PullRequest
3 голосов
/ 04 марта 2011

Следующее прекрасно работает в firefox / safari / chrome, в IE «this», похоже, теряет контекст в функции handleEvent () ... результат предупреждения - [объект Window], а это не то, что яхочу;при выводе из handleEvent () «this» должно быть ссылкой на объект HandleClick, а не на объект Window.

Мне не хватает чего-то базового, что вызывает это в IE?

<html>
<head>
<script type="text/javascript">
HandleClick = function(el) {
    this.element = document.getElementById(el);
    if( this.element.addEventListener ) {
        this.element.addEventListener("click", this, false);
    } else {
        if( this.element.attachEvent ) {
            this.element.attachEvent("onclick", this.handleEvent);
        }
    }
}
HandleClick.prototype = {
    handleEvent: function(e) {
        alert(this);
    }
}
</script>
</head>
<body onload="new HandleClick('logo')"></body>
</html>

1 Ответ

6 голосов
/ 04 марта 2011

.attachEvent() не дает вам this в качестве элемента. Вам нужно заключить обработчик в функцию, которая вызывает его из контекста элемента, к которому он присоединен.

    if( this.element.attachEvent ) {
        var that = this;
        this.element.attachEvent("onclick", function() { 
                                              that.handleEvent.call( that.element );
                                           } );
    }
...