Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   после AJAX перестаёт работать event (https://javascript.ru/forum/events/80058-posle-ajax-perestajot-rabotat-event.html)

greenwar 24.04.2020 00:32

так "та функция", это как раз ф-я ajaxPOST(), которая через jQuery вставляет новую таблицу.
там есть:
success: function(data) {ajaxRESULT(data);}

туда чтоли вставлять?
сейчас она стоит ПОСЛЕ неё... и всё равно не работает ^^

laimas 24.04.2020 02:49

Почему бы не $(родитель).on('mouseenter', 'a.ajax_hover' , ..., без надобности в set_ajax_hover_cb() ?

voraa 24.04.2020 07:08

Цитата:

Сообщение от greenwar (Сообщение 523320)
так "та функция", это как раз ф-я ajaxPOST(), которая через jQuery вставляет новую таблицу.
там есть:
success: function(data) {ajaxRESULT(data);}

туда чтоли вставлять?
сейчас она стоит ПОСЛЕ неё... и всё равно не работает ^^

После нее стоит - не значит, что после нее работает. В ajaxPOST() очевидно есть часть, которая работает асинхронно. Есть функция, которая работает, только, когда пришел ответ от сервера, после ответа от сервера идет изменение таблицы. И именно после этого изменения нужно вызывать set_ajax_hover_cb()

Вот представьте, что вы сейчас после вызова set_ajax_hover_cb() поставите вызов какой-нибудь функции foo().
Вызовется set_ajax_hover_cb(), затем foo(). А те функции, которые описаны в set_ajax_hover_cb(), как реакция на наведение мыши когда вызовутся? Когда нибудь потом, когда мышь наведется.
Так же и тут. в ajaxPOST() есть функция

function(data) {ajaxRESULT(data);}

которая работает "когда нибудь потом", когда придет ответ от сервера. Вот там, после изменения таблицы и надо делать вызов set_ajax_hover_cb()
Так можно сделать

success: function(data) {ajaxRESULT(data); set_ajax_hover_cb();}

greenwar 24.04.2020 10:35

Цитата:

Сообщение от laimas (Сообщение 523322)
Почему бы не $(родитель).on('mouseenter', 'a.ajax_hover' , ..., без надобности в set_ajax_hover_cb() ?

$( selector ).hover( handlerIn, handlerOut )

это ведь сокращённая версия для:
$( selector ).mouseenter( handlerIn ).mouseleave( handlerOut );

а вы хотите set_ajax_hover_cb() в handlerOut ? Что это даст?

greenwar 24.04.2020 10:38

Цитата:

Сообщение от voraa (Сообщение 523324)
success: function(data) {ajaxRESULT(data); set_ajax_hover_cb();}

там проблемка, она фиксирована, т.е. я её не создаю отдельно для этого вызова, а юзаю готовую...
и запихнуть туда ф-ю как?

laimas 24.04.2020 10:40

Цитата:

Сообщение от greenwar
это ведь сокращённая версия для

Нет, это делегирование обработки события родителю.

Цитата:

Сообщение от greenwar
а вы хотите set_ajax_hover_cb() в handlerOut ?

Я бы эту функцию вообще бы выбросил, как и не понимаю зачем тут таймер.

greenwar 24.04.2020 10:46

таймер, потому что это может быть "мышь проехала мимо", а выводить ничего не надо
а вот когда мышь остановилась на ссылке и прошло 0.5 сек, тогда уже точно надо
в предыдущей версии (которая рабочая, кстати, там нет этой проблемы)
там в конце таблицы так:
$('.tbl1 a.waitFB').hover(abc1,abc2);

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

laimas 24.04.2020 11:04

В таком случае таймер очищать можно и по ответу сервера, то есть обрабатывать нужно только заход на ... А делегирование решит остальные проблемы.

voraa 24.04.2020 11:20

Цитата:

Сообщение от laimas (Сообщение 523339)
В таком случае таймер очищать можно и по ответу сервера, то есть обрабатывать нужно только заход на ... А делегирование решит остальные проблемы.

Не должно быть обращения к серверу, если мышь задержалась на элементе меньше, чем на 0.5 сек. Как по ответу очищать, если не было обращения?

laimas 24.04.2020 11:34

Точно. Хотя не мала ли задержка в таком случае, в смысле насколько это полезно?


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