Примечание от sunnybear: в данной заметке lusever рассматривает наиболее компактные способы назначения обработчиков событий для элементов DOM-дерева. Рекомендуется читать вместе со статьями «отложенная» загрузка и ускоряем обработку событий.
Только практические javascript решения, без всякой теории о всплытии и захвате.
Рекомендую использовать выражения, идущие в конце логического блока.
<a href="#" onclick="func()">я ссылка</a>
preventDefault)<a href="#" onclick="func(); return false">я ссылка</a>
func false<a href="#" onclick="return func()">я ссылка</a>
this — нодаevent — тут значение имеет то, что мы передаем:function(event) — получим кросс-браузерный вариантfunction(e) — передаст объект Event только для не IE браузеров<a href="#" onclick="func(this, event)">я ссылка</a>
<a href="#" id="link">я ссылка</a>
var node = document.getElementById('link')node.onclick = function(){
this == node // true
}if (node.addEventListener)
node.addEventListener('click', function(e){}, false)
else
node.attachEvent('onclick', function(){})
if (node.attachEvent)
node.attachEvent('onclick', function(){})
else
node.addEventListener('click', function(e){}, false)var addEvent = node.attachEvent || node.addEventListener
addEvent(/*@cc_on 'on'+@*/'click', function(){}, false)node[/*@cc_on !@*/0 ? 'attachEvent' : 'addEventListener'](/*@cc_on 'on'+@*/'click', function(){}, false)node[/*@cc_on !@*/0 ? 'attachEvent' : 'addEventListener'](/*@cc_on 'on'+@*/'click', function(e){
var target = e.target || e.srcElement
// или
if (!e.target)
e.target = e.srcElement
// или если нам надо всего разочек
(e.target || e.srcElement).tagName
this == node // true везде кроме IE, в котором this == window
/* Отменяем всплытие */
if (e.stopPropagation)
e.stopPropagation()
else
e.cancelBubble
// или просто: используем вариант, который для совместимости работает во всех браузерах.
// В FF2 причем быстрее stopPropagation, в остальных не смотрел
e.cancelBubble = true
/* Убираем действие по умолчанию (в данном случае клик) */
if (e.preventDefault)
e.preventDefault()
else
e.returnValue = false
// при attachEvent (как здесь) работает только в IE;
// при назначении напрямую (node.onclick) везде
return false
}, false)Спасибо за помощь
shabunc и
crazyprotein.
Если у вас возникли какие-либо вопросы или пожелания по работе Web Optimizator, пожалуйста, поделитесь ими, используя контактную информацию.
Спасибо за использование сервиса!
This work is licensed under a Creative Commons Attribution 3.0 Unported License.