18.07.2012, 12:43
|
Интересующийся
|
|
Регистрация: 04.06.2012
Сообщений: 17
|
|
на что навешать обработчик события
насколько я знаю обычто навешивают на id или cssClass
но вот к примеру сейчас верстальщик хочет удалить некоторые cssClassы из атрибута class но так как в js эти cssClassы используются удалить их как-то затруднительно
на будущее собираюсь навешать обработчик события на атрибут "data-js-selector", чем это плохо, какие есть подводные камни?
поделитесь опытом/мнением как делаете/сделали бы вы
|
|
18.07.2012, 12:48
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
leko,
Походу Вы говорите о jQuery, посколь навешивать на класс в нативном JS - затруднительно
|
|
18.07.2012, 12:54
|
|
Люмус, Емаксос Developer!
|
|
Регистрация: 06.05.2010
Сообщений: 677
|
|
leko - Вам нужно разобраться что такое выборка елементов, а что такое навешивание событий.
Событие не навешивается на аттрибуты элемента, событие навешивается на сам элемент. В данном случае по аттрибутам Вы находите элемент на странице и после на сам элемент уже навешиваете событие.
В данном случае никаких проблем не будет, кроме того что JQuery будет немного медлене находить элемент на странице.
|
|
18.07.2012, 13:11
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от leko
|
на будущее собираюсь навешать обработчик события на атрибут "data-js-selector", чем это плохо, какие есть подводные камни?
|
а как Вы думаете? в каждом "акте" поиска будут проверяться все элементы на странице.
var element = document.querySelector(,,,,,); // БАБАХ!! 20мс сожрали
// тут код
// а тут ещё поиск
var elements = document.querySelectorAll(........); // ВСПЫШКА !!! отожрали 50мс, ибо querySelector прекращает поиск после первого найденного, а эта штука идет дальше.
Сообщение от leko
|
поделитесь опытом/мнением как делаете/сделали бы вы
|
идеал - запилить ID нужному элементу, и огораживать верстальщика от этого ИД.
|
|
18.07.2012, 13:13
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от Magneto
|
кроме того что JQuery будет немного медлене находить элемент на странице.
|
не факт, принципы то одни, и распарсить в нескольких обрамлениях, на js - скорее всего чел не будет, будет парсить всю страницу - , хотя, к примеру там будет два тего данного класса заранее известно лежащих в div #Wrap1 и div #Wrap2 - так что правота под вопросом
При много тегах - может чаша и склонится в Вашу сторону
|
|
18.07.2012, 13:20
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от melky
|
идеал - запилить ID нужному элементу, и огораживать верстальщика от этого ИД.
|
Идеал по скорости событие вешать в тег
|
|
18.07.2012, 18:51
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Deff
|
Идеал по скорости событие вешать в тег
|
а ещё лучше - вешать делегировщика (делегатора, обработчика событий для делегирования, короче ) событий прямо в боди.
хм ... напомните, почему нельзя вешать обработчики через атрибуты? из-за того, что низя получить объект события?
да вроде можно :
<script>
function rand () {
return 255 * Math.random() | 0;
}
function delegater (e) {
e = e || event;
e = e.target || e.srcElement;
e.style.backgroundColor = "rgb("+ rand() +", " + rand() + ", " + rand() + ")";
}
</script>
<body onclick="delegater(event)">
<div>DIV</div>
<p>P</p>
<a href="#">A</a>
</body>
Потому что устарело? смешно же.
Последний раз редактировалось melky, 18.07.2012 в 19:03.
|
|
18.07.2012, 20:21
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от melky
|
напомните, почему нельзя вешать обработчики через атрибуты?
|
тут скорее не нельзя, а это ссылка
Сообщение от melky
|
а ещё лучше - вешать делегировщика (делегатора, обработчика событий для делегирования, короче ) событий прямо в боди
|
Делегирование, конечно, хорошая вещь, но чтобы вешать прямо на body (типа если id или класс у цели такой-то, то делай то-то).
Имеется в виду лучше для производительности или удобства разработки (или может быть и то и другое)?
|
|
18.07.2012, 20:54
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от bes
|
тут скорее не нельзя, а это ссылка
|
в отдельно взятом проекте можно этим пренебречь. и подписать в комменте, мол, так и надо, чтобы просматривальщики исходного кода страницы не возмущались.
Сообщение от bes
|
Делегирование, конечно, хорошая вещь, но чтобы вешать прямо на body (типа если id или класс у цели такой-то, то делай то-то).
|
live у JQ примерно так работает, и никто не возмущается.
Сообщение от bes
|
Имеется в виду лучше для производительности или удобства разработки (или может быть и то и другое)?
|
и того, и другого. вместе, не порознь.
|
|
19.07.2012, 10:32
|
Интересующийся
|
|
Регистрация: 04.06.2012
Сообщений: 17
|
|
Сообщение от Magneto
|
Событие не навешивается на аттрибуты элемента, событие навешивается на сам элемент. В данном случае по аттрибутам Вы находите элемент на странице и после на сам элемент уже навешиваете событие.
|
да, ты прав
Сообщение от melky
|
а ещё лучше - вешать делегировщика (делегатора, обработчика событий для делегирования, короче ) событий прямо в боди.
|
может я туплю, но не понял что имеется в виду
Сообщение от melky
|
хм ... напомните, почему нельзя вешать обработчики через атрибуты? из-за того, что низя получить объект события?
|
а если потом надо поменять функцию, это ж сколько работы, да и вероятность где-то пропустить достаточна высокая
|
|
|
|