|
Контекст this для событий
Привет всем! Давненько влотную не работал с JS, посему забыл мелочи. Необходимо вспомнить следующее:
<li id='l' onclick='f(event);'>11111111</li>
<script type="text/javascript">
function f(e){
alert(e.target); //всё нормально, здесь li
alert(this); //почему в контексте this - Window? Ф-ция же срабатывает лишь при наведении на li, => и this должен указывать на этот эл-т...
}
document.getElementById('l').onmouseover = function (e) {
console.log(this) //вот здесь всё нормально, передаётся li. Но ведь в обоих случаях ф-ция является обработчиком СОБЫТИЯ на КОНКРЕТНОМ элементе, в чём же тут дело?
}
</script>
|
Цитата:
|
Цитата:
Boolean_Type, ты неправильно сравнение делаешь.
<button onclick='alert(this);'>this в атрибуте (кликни)</button>
<button id="button2">this в свойстве (кликни)</button>
<script>
button2.onclick = function() {
alert(this);
};
</script>
|
А теперь добавляем вызов функции:
<button onclick='f(event)'>this в атрибуте (кликни)</button>
<button id="button2">this в свойстве (кликни)</button>
<script>
function f(event) {
alert(this);
}
button2.onclick = function(event) {
f(event);
};
</script>
Boolean_Type, осознал косяк? |
Указываем контекст при вызове функции:
<button onclick='f.call(this, event)'>this в атрибуте (кликни)</button>
<script>
function f(event) {
alert(this);
}
</script>
|
Цитата:
|
Цитата:
|
Цитата:
|
Все равно не понял почему, видимо так было задумано в эпоху зарождения браузеров со скриптами http://www.quirksmode.org/js/events_early.html
|
Цитата:
|
| Часовой пояс GMT +3, время: 11:37. |
|