|
Контекст 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, время: 02:47. |
|