Nie wykrywa eventów po załadowaniu komentarzy przez JS, obliczanie pozycji elementu

0

Witam. Robię hovercards na stronie. Podpiąłem je do postów i działa ok. Mam taki podgląd posta/zdjeć jak na Facebooku (na cały ekran robi się div przezroczysty żeby nic nie można było klikać i pokazuje powiększone zdjęcie z posta oraz komentarze obok) i w tym podglądzie nie wykrywało mi wcześniej w ogóle eventów typu mouseenter, mouseleave. Miałem je zdefiniowane w pliku JS w taki sposób:

$('a.hovercard, .hovercard').bind('mouseenter', function() {
alert('mouse enter');
});
$('.hovercard, #hovercard').bind('mouseleave', function() {
alert('mouse leave');
});

Poszukałem w internecie i zrobiłem tak:

$(document).on('mouseenter', 'a.hovercard .hovercard', function() {
alert('mouse enter');
});
$(document).on('mouseleave', '.hovercard #hovercard', function() {
alert('mouse leave');
});

i to działa, ale chciałbym się dowiedzieć czy to nie jest jakieś bardzo zamulające. Dodając event do całego dokumentu chyba jakoś sprawdzać cały czas będzie każdą akcję na całej stronie. Czy jest na to inny sposób?

2 pytanie jeszcze mam.
Jak można określić współrzędne dla hovercards? Próbowałem wiele różnych kodów (event.currentTarget.x, event.target.x, event.target.explicitionCurrentTarget itp) i przy postach w większosci tych kodów pokazuje dobrze, ale w podglądzie już albo za daleko ustawi albo wgl o kilkaset px...

Dziękuję z góry za pomoc.

0

W jQuery masz taki obiekt jak $(element).offset() - przyda Ci się.

Co do zamulania - zrób tak, żeby pierwszy selector (u Ciebie document) był jak najdokładniejszy (czyli nie wskazywał na cały dokument, tylko np. div-kontener na komentarze --- pod warunkiem, że ten kontener istnieje cały czas w dokumencie, jeżeli nie to coś wyżej, np. kontener na artykuł) - jQuery powinno wtedy śledzić zmiany tylko w tym elemencie, co zmniejszy możliwość "zamulania".

Najszybszym rozwiązaniem (ale upierdliwym) jest wydzielenie przypinania zdarzeń do osobnej funkcji i w momencie jak wiesz, że akurat nowe komentarze pojawiły się w DOM - to wywołujesz tę funkcję przypinania zdarzeń. Dodatkowo sam musisz kontrolować (np. dodając klasę) czy zdarzenia nie zostały już przypięte do danego elementu (żeby uniknąć podwójnego wykonywania funkcji na starych elementach).

1 użytkowników online, w tym zalogowanych: 0, gości: 1