Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   на что навешать обработчик события (https://javascript.ru/forum/misc/29942-na-chto-naveshat-obrabotchik-sobytiya.html)

leko 18.07.2012 12:43

на что навешать обработчик события
 
насколько я знаю обычто навешивают на id или cssClass
но вот к примеру сейчас верстальщик хочет удалить некоторые cssClassы из атрибута class но так как в js эти cssClassы используются удалить их как-то затруднительно

на будущее собираюсь навешать обработчик события на атрибут "data-js-selector", чем это плохо, какие есть подводные камни?
поделитесь опытом/мнением как делаете/сделали бы вы

Deff 18.07.2012 12:48

leko,
Походу Вы говорите о jQuery, посколь навешивать на класс в нативном JS - затруднительно

Magneto 18.07.2012 12:54

leko - Вам нужно разобраться что такое выборка елементов, а что такое навешивание событий.

Событие не навешивается на аттрибуты элемента, событие навешивается на сам элемент. В данном случае по аттрибутам Вы находите элемент на странице и после на сам элемент уже навешиваете событие.

В данном случае никаких проблем не будет, кроме того что JQuery будет немного медлене находить элемент на странице.

melky 18.07.2012 13:11

Цитата:

Сообщение от leko
на будущее собираюсь навешать обработчик события на атрибут "data-js-selector", чем это плохо, какие есть подводные камни?

а как Вы думаете? в каждом "акте" поиска будут проверяться все элементы на странице.
var element = document.querySelector(,,,,,); // БАБАХ!! 20мс сожрали
// тут код
// а тут ещё поиск
var elements = document.querySelectorAll(........); // ВСПЫШКА !!! отожрали 50мс, ибо querySelector прекращает поиск после первого найденного, а эта штука идет дальше.


Цитата:

Сообщение от leko
поделитесь опытом/мнением как делаете/сделали бы вы

идеал - запилить ID нужному элементу, и огораживать верстальщика от этого ИД.

Deff 18.07.2012 13:13

Цитата:

Сообщение от Magneto
кроме того что JQuery будет немного медлене находить элемент на странице.

не факт, принципы то одни, и распарсить в нескольких обрамлениях, на js - скорее всего чел не будет, будет парсить всю страницу - , хотя, к примеру там будет два тего данного класса заранее известно лежащих в div #Wrap1 и div #Wrap2 - так что правота под вопросом
При много тегах - может чаша и склонится в Вашу сторону

Deff 18.07.2012 13:20

Цитата:

Сообщение от melky
идеал - запилить ID нужному элементу, и огораживать верстальщика от этого ИД.

Идеал по скорости событие вешать в тег

melky 18.07.2012 18:51

Цитата:

Сообщение от Deff (Сообщение 189686)
Идеал по скорости событие вешать в тег

а ещё лучше - вешать делегировщика (делегатора, обработчика событий для делегирования, короче :)) событий прямо в боди.

хм ... напомните, почему нельзя вешать обработчики через атрибуты? из-за того, что низя получить объект события?

да вроде можно :

<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>

Потому что устарело? смешно же.

bes 18.07.2012 20:21

Цитата:

Сообщение от melky
напомните, почему нельзя вешать обработчики через атрибуты?

тут скорее не нельзя, а это ссылка

Цитата:

Сообщение от melky
а ещё лучше - вешать делегировщика (делегатора, обработчика событий для делегирования, короче ) событий прямо в боди

Делегирование, конечно, хорошая вещь, но чтобы вешать прямо на body (типа если id или класс у цели такой-то, то делай то-то).
Имеется в виду лучше для производительности или удобства разработки (или может быть и то и другое)?

melky 18.07.2012 20:54

Цитата:

Сообщение от bes
тут скорее не нельзя, а это ссылка

в отдельно взятом проекте можно этим пренебречь. и подписать в комменте, мол, так и надо, чтобы просматривальщики исходного кода страницы не возмущались.
Цитата:

Сообщение от bes
Делегирование, конечно, хорошая вещь, но чтобы вешать прямо на body (типа если id или класс у цели такой-то, то делай то-то).

live у JQ примерно так работает, и никто не возмущается.
Цитата:

Сообщение от bes
Имеется в виду лучше для производительности или удобства разработки (или может быть и то и другое)?

и того, и другого. вместе, не порознь.

leko 19.07.2012 10:32

Цитата:

Сообщение от Magneto
Событие не навешивается на аттрибуты элемента, событие навешивается на сам элемент. В данном случае по аттрибутам Вы находите элемент на странице и после на сам элемент уже навешиваете событие.

да, ты прав
Цитата:

Сообщение от melky
а ещё лучше - вешать делегировщика (делегатора, обработчика событий для делегирования, короче ) событий прямо в боди.

может я туплю, но не понял что имеется в виду
Цитата:

Сообщение от melky
хм ... напомните, почему нельзя вешать обработчики через атрибуты? из-за того, что низя получить объект события?

а если потом надо поменять функцию, это ж сколько работы, да и вероятность где-то пропустить достаточна высокая


Часовой пояс GMT +3, время: 16:47.