Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.07.2015, 01:32
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Как "очистить" clone()
Всем привет!
Вызываю модальное окно. В нем клонирую div с внутренностями:
var clon = $('.dotted-field select.cat_1').parent().prev().clone(true);
clon.insertBefore($('.parent_level'));

Нормально происходит клонирование и вставка в нужное место.
Закрываю окно.
Вновь открываю модальное окно, клонирую div - вставляется уже две копии.
Если закрыть/открыть окно еще раз - будет вставлено три копии и т.д.

Как обнулять clone чтобы при каждом новом открытии модального окна вставлялась только одна копия?
Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 19.07.2015, 09:03
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Проверять что в прошлый раз уже было вставлено и больше не вставлять.
Ответить с цитированием
  #3 (permalink)  
Старый 19.07.2015, 10:01
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Дело в том, что это большой каталог. И вставлять необходимо в разные места. При этом каждая вставка не дублируется содержимым. Просто каждый раз количество вставляемых блоков увеличивается на 1
Ответить с цитированием
  #4 (permalink)  
Старый 19.07.2015, 10:12
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

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

$('.parent_level').empty()
Ответить с цитированием
  #5 (permalink)  
Старый 19.07.2015, 10:34
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Нет, это не правильно как-то, вставлять 5 блоков, а потом удалять 4.
Получается решения нет.
Ок, попробую сделать средствами ajax
Всем спасибо за помощь
Ответить с цитированием
  #6 (permalink)  
Старый 19.07.2015, 10:48
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Походу ТС нужно было оправдание для своего бреда насчет аякса.

Сообщение от skeef
Просто каждый раз количество вставляемых блоков увеличивается на 1
Ну вот видите, остается только подсчитать _там_ количество этих блоков и, если оно 0 - вставить, иначе - пропустить.
Ответить с цитированием
  #7 (permalink)  
Старый 19.07.2015, 10:52
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Можно как в фильме Шестой день помечать клоны точкой:

if(!$('.parent_level').data('cloned'){
   var clon = $('.dotted-field select.cat_1').parent().prev().clone(true);
   clon.setAttibute('cloned',1);
   clon.insertBefore($('.parent_level'));
}



За правильность жикверной проверки не ручаюсь, ибо не знаю жиквери, смысл и так понятен.
Ответить с цитированием
  #8 (permalink)  
Старый 19.07.2015, 11:13
Интересующийся
Отправить личное сообщение для skeef Посмотреть профиль Найти все сообщения от skeef
 
Регистрация: 13.04.2011
Сообщений: 25

Все оказалось гораздо проще: я опрашиваю селекты по событию onChange и тут же вставляю новый селект, который понятное дело изменился (он же вставляется с тем же id да еще и последним). Поэтому событие и вызывается несколько раз.
Короче сам лоханулся.
Спасибо всем за помощь

kostyanet:
Классная идея! Возьму на вооружение, Спасибо
Ответить с цитированием
  #9 (permalink)  
Старый 19.07.2015, 11:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от kostyanet
clon.setAttibute('cloned',1);
либо clon[0].setAttibute('data-cloned',1);
или
clon.data('cloned',1);
ну и синтаксис в условии
if(!$('.parent_level').data('cloned')){
идея понятна, но при нормальном алгоритме клонирования дубликатов вложения не возникает
на всякий случай: ставить и проверять 'cloned' надо на одном и том же элементе.

Последний раз редактировалось рони, 19.07.2015 в 11:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
initComponent: Как получить данные родителя и как получить store для вызова load()? Пролетарий ExtJS 76 04.07.2015 09:22
Как сделать что бы картинки с другого url отображались как свои zlodey Серверные языки и технологии 1 04.05.2015 21:30
Как писать код который легко поддерживать, расширять, читать. Policeman Общие вопросы Javascript 3 24.03.2012 05:40
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47