интересно поведения addEventListener
var o = {
age: 22,
fn: function (e) {
console.log(this)
// сейчас this ссылается элемент DOM!
console.log(e.target)
}
}
document.getElementById('div').addEventListener('click', o.fn, false);
var o = {
age: 22,
handleEvent: function (e) {
//но только меняем названия метода и происходит магия !
console.log(this.age)
console.log(e.target)
}
}
document.getElementById('div').addEventListener('click', o, false);
Кто не удивился объясните что там происходит , а то только одни догадки. о handleEvent нахожу все по англ ((( |
Разобрался как он работает ! если в addEventListener вместо функции передать object то он начинает искать метод handleEvent. С помощью handleEvent можно легко навешивать кучу событий на 1 элемент .
Пример взят с http://www.thecssninja.com/javascript/handleevent
var obj = {
init: function() {
document.getElementById("btn").addEventListener("click", this, false);
document.getElementById("btn").addEventListener("touchstart", this, false);
},
handleEvent: function(e) {
switch(e.type) {
case "click":
this.button();
break;
case "touchstart":
this.button();
break;
}
},
dude: "holla",
button: function() {
alert(this.dude);
}
};
obj.init();
|
caetus, прикольно, не знал о таком :)
|
Цитата:
<html>
<head>
</head>
<body>
<div id="div1">div with function handler</div>
<div id="div2">div with object handler</div>
<script>
HTMLDivElement.prototype.addEventListener2=function(event, handler){
if(typeof handler==="function") this["on"+event]=handler
if(typeof handler==="object") this["on"+event]=function(){handler.handleEvent.call(handler)}
}
handler={
age: 22,
handleEvent: function(){alert(this.age)}
}
div1.age=100
div1.addEventListener2("click", handler.handleEvent)
div2.addEventListener2("click", handler)
</script>
</body>
</html>
|
Цитата:
|
| Часовой пояс GMT +3, время: 17:55. |