Цитата:
<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, время: 02:08. |