Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.09.2015, 18:46
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Клонировать блок со всеми событиями
Доброго времени суток. Возникла проблема, никак не пойму почему не получается решить. Суть такая: скрипт при загрузке страницы создает див блок с надписью "Леонардо", вешает ему функцию смены фона при наведении на него курсора и помещает его в див блок BOX. Есть кнопка Клонировать, которая должна клонировать этот блок с надписью Леонардо со всеми событиями. Но на клонированных блоках нет функции смены фона. Как надо склонировать чтобы эти 2 блока ничем не отличались?

<div style="border:1px solid blue; cursor:pointer; width:100px; text-align:center; position:absolute" onclick=clone()>Клонировать</div>
<div class="name_container" style="border:1px solid blue; width:200px; height:100px; text-align:center; position:absolute; margin-left:110px " class="part_01"></div>

<script>
var div_block = document.createElement('div');
div_block.className = 'BOX';
div_block.style.border = '1px solid red';
div_block.style.cursor = 'default';
div_block.innerHTML = 'Леонардо'
div_block.onmouseover = function(){this.style.backgroundColor = 'green';}
div_block.onmouseout = function(){this.style.backgroundColor = '';}
document.getElementsByClassName('name_container')[0].appendChild(div_block)

function clone(){
var clone_div = document.getElementsByClassName('BOX')[0].cloneNode(true)
document.getElementsByClassName('name_container')[0].appendChild(clone_div)
}
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 10.09.2015, 18:53
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

фонарик,
После создания клона ноды вам надо навесить на неё обработчики. Обработчики не клонируются при создании клона.
Ответить с цитированием
  #3 (permalink)  
Старый 10.09.2015, 19:23
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Странное какое-то клонирование получается. У меня в блоке Леонардо еще с десяток блоков с функциями и стилями
Ответить с цитированием
  #4 (permalink)  
Старый 10.09.2015, 19:42
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

фонарик,
<div class="to-clone" style="border:1px solid blue; cursor:pointer; width:100px; text-align:center; position:absolute">Клонировать</div>
<div class="name_container" style="border:1px solid blue; width:200px; height:100px; text-align:center; position:absolute; margin-left:110px " class="part_01"></div>

<script>

    function createElement(){
        var events = {
            mouseover: "green",
            mouseout: ""
        };
        var div_block = document.createElement('div');
        div_block.className = 'BOX';
        div_block.style.border = '1px solid red';
        div_block.style.cursor = 'default';
        div_block.innerHTML = 'Леонардо';
        Object.keys(events).forEach(function (eventName) {
            div_block.addEventListener(eventName, function () {
                this.style.backgroundColor = events[eventName];
            }, false);
        });
        document.querySelector('.name_container').appendChild(div_block);
    }

    window.addEventListener('DOMContentLoaded', function () {
        createElement();
        document.querySelector('.to-clone').addEventListener('click', createElement);
    }, false);
</script>

Последний раз редактировалось tsigel, 10.09.2015 в 19:47.
Ответить с цитированием
  #5 (permalink)  
Старый 10.09.2015, 19:54
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

tsigel,
спасибо вам за вариант, но боюсь что я его не осилю. Простой перебор - дешего и сердито, зато мозг не сломаю ))
Ответить с цитированием
  #6 (permalink)  
Старый 10.09.2015, 20:10
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Сообщение от tsigel Посмотреть сообщение
Обработчики не клонируются при создании клона.
Если блок создан не через скрипт, то простое клонирование клонирует с обработчиками Как так получается
<div style="border:1px solid blue; cursor:pointer; width:100px; text-align:center; position:absolute" onclick=clone()>Клонировать</div>
<div class="name_container" style="border:1px solid blue; width:200px; height:200px; text-align:center; position:absolute; margin-left:110px " class="part_01">
<div class="BOX" onmouseover="this.style.backgroundColor = 'green'" onmouseout="this.style.backgroundColor = ''" style="border:1px solid red; cursor:default">Леонардо</div>
</div>

<script>
function clone(){
var clone_div = document.getElementsByClassName('BOX')[0].cloneNode(true)
clone_div.onmouseover = function(){this.style.backgroundColor = 'green';}
document.getElementsByClassName('name_container')[0].appendChild(clone_div)
}
</script>
Ответить с цитированием
  #7 (permalink)  
Старый 10.09.2015, 21:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от фонарик
Как так получается
Сообщение от фонарик
onmouseout="this.style.backgroundColor = ''"
атрибут
Сообщение от фонарик
div_block.onmouseover = function(){this.style.backgroundColor = 'green';}
свойство
Ответить с цитированием
  #8 (permalink)  
Старый 11.09.2015, 05:56
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Как вариант вешать события через атрибуты:

http://jsfiddle.net/rbyapfn2/

А если тебе действительно нужно менять только стили при наведении, то в этом тебе поможет CSS псевдокласс - hover.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Копирование блоков в блок maximus Events/DOM/Window 1 14.09.2013 19:40
как скрыть блок div по ключевому слову Sacred13 Элементы интерфейса 6 06.08.2013 19:13
Показать/скрыть блок Lelja_05 jQuery 10 01.07.2013 20:05
Скрыть/показать блок в зависимости от radio MBmusic Элементы интерфейса 10 08.05.2013 17:23
Умный выскакивающий блок lobanov_kirill_ Общие вопросы Javascript 2 05.03.2013 00:29