Цитата:
<html> <head> <meta charset = "utf-8" /> <style> </style> </head> <body> <div id = "foo">click me</div> <script> foo.storage = [] foo.onclick = function(){var self = this; foo.storage.forEach(function(f){f.call(self)})} with(foo){ storage.push(function(){alert(this.innerHTML)}) storage.push(function(){alert(this.id)}) storage.push(function(){alert("fuck addEventListener")}) } </script> </body> </html> Цитата:
|
Malleys, спасибо. Там оказывается клик считывался на дочернем элементе с абсолютным позиционированием.
|
sortarray, это вот ваше решение проблемы?
Прошу прощения, но каким образом ваш код избавит меня от затирания прошлого обработчика события на "левом" элементе? Более того, если я не буду знать о вашем костыле и объявлю новый обработчик элементу #foo через свойство, то все ваши handler'ы нафиг поотваливаются. Цитата:
Цитата:
Цитата:
|
Nexus,
Цитата:
Цитата:
Никаких ограничений. Цитата:
Цитата:
|
Цитата:
Вы в проекте все обработчики на 1 элемент вешаете или для каждого будете создавать отдельное хранилище и пушить в него хандлеры? Ваше решение работоспособно до тех пор, пока я не захочу объявить обработчик через свойство, а не через ваш велосипед. foo.storage = [] foo.onclick = function(){var self = this; foo.storage.forEach(function(f){f.call(self)})} with(foo){ storage.push(function(){alert(this.innerHTML)}) storage.push(function(){alert(this.id)}) storage.push(function(){alert("fuck addEventListener")}) } foo.onclick=()=>{ alert(prompt('Угадайте сколько раз вылезет alert',0)==1); }; Цитата:
Цитата:
Цитата:
|
Не очень решение для нескольких элементов + страшно представить код для обработки второго события )
<html> <head> <meta charset = "utf-8" /> <style> </style> </head> <body> <div id = "foo">click me</div> <div id = "bar">click me</div> <script> foo.storage = [] foo.onclick = function(){var self = this; foo.storage.forEach(function(f){f.call(self)})} with(foo){ storage.push(function(){alert(this.innerHTML)}) storage.push(function(){alert(this.id)}) storage.push(function(){alert("fuck addEventListener")}) } bar.storage = [] bar.onclick = function(){var self = this; foo.storage.forEach(function(f){f.call(self)})} with(bar){ storage.push(function(){alert(this.innerHTML)}) storage.push(function(){alert(this.id)}) storage.push(function(){alert("fuck addEventListener")}) } </script> </body> </html> + Вы начинали с того, что хвалили объявление обработчиков через свойство, однако один фиг от него ушли, ибо ваше решение его просто не поддерживает (писал выше). |
Nexus,
Я полагаю этот спор пустым, мне не интересно что-то доказывать. Кто понимает, тот и без того понимает Вообще, в программировании всегда действует принцип "явное лучше неявного". Если даже реализовать addEventListener с тем же поведением, что нейтив, самостоятельно, это будет лучше хардкора |
sortarray, отчего же пустым?
Если вы докажете свою точку зрения, то те "заблудшие души", что объявляют event listener'ы через метод "addEventListener" задумаются о эффективности такого подхода и, возможно, перейдут на использование вашего велосипеда. В противном случае, я таки надеюсь, вы задумаетесь о эффективности уже вашего решения etc. |
Цитата:
|
Цитата:
document.querySelector('#id').storage.click.push(function(){});//Т.е. объявление обработчика события таким способом более "явное", чем строкой ниже? document.querySelector('#id').addEventListener('click',function(){}); Цитата:
Upd. https://jsfiddle.net/oL8z9r38/ |
Часовой пояс GMT +3, время: 11:54. |