Событие двойного щелчка Jquery после добавления элемента к другому элементу

Я использую гибкий инструментарий, фреймворк, который генерирует код javascript из PHP. У меня есть элемент div (я назову его «верхний элемент»), который содержит некоторые другие элементы div, некоторые кнопки. Я хочу переместить «верхний элемент» в другой элемент, чтобы изменить его родителя.

Я пробовал что-то вроде:

$('#top-element').appendTo($('#new-parent'));

Но проблема в том, что у «верхнего элемента» есть несколько дочерних элементов, у которых есть события кликов, некоторые кнопки. После того, как я добавляю «верхний элемент» к новому элементу (после изменения его родителя), события щелчка запускаются дважды.

Я попытался клонировать элемент и добавить клонированный элемент к новому родителю:

var cloned_top_element = $('#top-element').clone(true);
cloned_top_element.appendTo($('#new-parent'));

У меня возникла та же проблема, дважды вызывалось событие click для детей "top-element".

Способ предотвращения двойного щелчка заключается в использовании:

unbind('click') or off('click')

Я пробовал что-то вроде:

$('#new-parent').find('.children-class').unbind('dblclick').unbind('click');

Но до сих пор никаких результатов.

Привязка дочерних кнопок выглядит так:

$('.children-class').bind('click',function(ev){ ev.preventDefault();ev.stopPropagation(); other stuff });

Функция привязки появляется только один раз. В коде js нет дубликатов.

Есть идеи? Ожидаемое спасибо.


person Pascut    schedule 04.11.2016    source источник
comment
Как вы привязываете событие click в первую очередь?   -  person freedomn-m    schedule 04.11.2016
comment
Вы можете воспроизвести эту ошибку в jsfiddle?   -  person madalinivascu    schedule 04.11.2016
comment
Нет, потому что у меня есть фреймворк и много пользовательского кода.   -  person Pascut    schedule 04.11.2016
comment
можешь хотя бы html предоставить   -  person madalinivascu    schedule 04.11.2016
comment
нет, потому что подразумевается много кода   -  person Pascut    schedule 04.11.2016
comment
Вы говорите, что он появляется один раз - вы также имеете в виду, что он вызывается только один раз?   -  person freedomn-m    schedule 04.11.2016
comment
да, он вызывается только один раз. Что касается привязки, это не устарело, но начиная с jQuery 3.0, .bind() устарело. Мы не используем jquery 3.0..   -  person Pascut    schedule 04.11.2016
comment
Я не сказал устаревший, я сказал замененный. :)   -  person freedomn-m    schedule 04.11.2016
comment
Фреймворк сгенерировал bind по умолчанию. Я лично использую на... но привязка также должна работать хорошо   -  person Pascut    schedule 04.11.2016
comment
Вам нужно будет попытаться воссоздать проблему в новом коде. Слишком много другого кода, который может вызвать проблему, например, фреймворк и ваша html-структура. Если вы не можете воссоздать это с помощью простого jsfiddle (пара div и appendTo), то это должно быть чем-то в этом скрытом коде, который мы не можем видеть, поэтому не можем вам помочь. Это может помочь минимальный воспроизводимый пример   -  person freedomn-m    schedule 04.11.2016
comment
Хороший вопрос, но я создал этот вопрос в надежде, что, возможно, у кого-то еще была такая же проблема в прошлом.   -  person Pascut    schedule 04.11.2016
comment
Я также попытался заменить начальное событие bind('click') на unbind('click').bind('click') , но никаких изменений. Это должно сработать, но в моем случае не работает   -  person Pascut    schedule 04.11.2016
comment
Вот скрипт со всей предоставленной вами информацией: jsfiddle.net/hefaa8ky. Я рекомендую обновить заголовок вопроса. чтобы включить фреймворк (скрытый в комментарии) и, возможно, добавить тег (если он есть) для этого фреймворка. Возможно, это известная проблема с фреймворком, но, как стоит вопрос, она не воспроизводима.   -  person freedomn-m    schedule 04.11.2016
comment
Ты прав. Я предполагаю, что эта проблема связана с фреймворком.   -  person Pascut    schedule 04.11.2016
comment
Ужасно то, что событие привязки элемента появляется только один раз в исходном коде js страницы, поэтому не должно быть двух триггеров. Я проверю всех его родителей, может, там жучок.   -  person Pascut    schedule 04.11.2016
comment
Вы пытались использовать detach(), а затем appendTo()?   -  person Mandeep Jain    schedule 04.11.2016
comment
Да, но он работает аналогично клонированию. Он по-прежнему вызывает два щелчка. Это проблема js, связанная со страницей, это происходит только на одной странице, это не общая проблема js.   -  person Pascut    schedule 04.11.2016
comment
помогло бы, но следовал только тегу [atk4], а не [agiletoolkit]. Теперь буду следить за обоими.   -  person romaninsh    schedule 29.11.2016


Ответы (1)


Удалите true в функции клонирования .clone(); это не приведет к копированию обработчиков событий

person madalinivascu    schedule 04.11.2016
comment
Я пробовал это также. Еще два триггера для события клика. - person Pascut; 04.11.2016
comment
Нет, потому что у меня есть фреймворк и много пользовательского кода. JS в отношении событий кликов генерируется фреймворком. Но это действительный код js. - person Pascut; 04.11.2016
comment
это называется: гибкий инструментарий - person Pascut; 04.11.2016
comment
Вот почему я принял ваш ответ: это была проблема, связанная с фреймворком. В конце концов, clone(), за которым следует скрытие начального элемента и добавление клонированного элемента к новому родителю, решили проблему. Спасибо. - person Pascut; 07.11.2016