2015-02-17 2 views
0

Посмотрите это jsfiddle https://jsfiddle.net/3o38nbzs/4/ Когда я клонирую, я могу переместить клон, но он не «прослушивает» клик. https://jsfiddle.net/L5mg87jm/ Когда я клонирую, клон статичен.Клон JavaScript не работает

Сначала я использовал Clone() и второй клон (true, true), что является единственной разницей.

Как создать клон для ответа на событие click?

В принципе, я знаю, когда пользователь нажимает на клонированный объект. Я попытался использовать клон (true, true), но он все еще не работает. Когда я использую .clone(), я могу перемещать объект, но щелчок не работает. Когда я использую .clone (true, true), ничего не работает.

 // Clone Block 
     function cloneblock(obj, event, ui) { 
      var idn = Math.floor((Math.random() * 100) + 1), idt = '#' + idn; 
      if (obj) { 
       var block = $(selected).clone(); 
       block.css({ left: mouse.X + 'px', top: mouse.Y + 'px' }).attr('id', idn).removeClass('ui-draggable selected'); 
      } else { 
       var block = $(ui.draggable).clone(); 
       block.css({ left: mouse.X + 'px', top: mouse.Y + 'px' }).attr('id', idn).removeClass('ui-draggable selected gblock').addClass('block'); 
      } 
      block.children('.ui-widget-content').children('p').children('.vertexout').attr('id', 'vo' + idn); 
      var exit = block.children('.ui-widget-content').children('p').children('.vertexout'); 
      if ($(exit).hasClass('image')) { 
       $(exit).attr('id', 'v' + idn + 4); 
       jsPlumb.makeSource($(exit), { 
        scope: 'image' 
       }); 
      } else if ($(exit).hasClass('int')) { 
       $(exit).attr('id', 'v' + idn + 5); 
       jsPlumb.makeSource($(exit), { 
        scope: 'int' 
       }); 
      } else if ($(exit).hasClass('float')) { 
       $(exit).attr('id', 'v' + idn + 6); 
       jsPlumb.makeSource($(exit), { 
        scope: 'float' 
       }); 
      } else { 
       $(exit).attr('id', 'v' + idn + 7); 
       jsPlumb.makeSource($(exit), { 
        scope: 'char' 
       }); 
      } 
      var vin2 = block.children('.ui-widget-content').children('p').children('.vertexin'); 
      for (i = 0; i < vin2.length; i++) { 
       if ($(vin2[i]).hasClass('image')) { 
        $(vin2[i]).attr('id', 'v' + idn); 
        jsPlumb.makeTarget($(vin2[i]), { 
         maxConnections: 1, 
         scope: 'image' 
        }); 
       } else if ($(vin2[i]).hasClass('int')) { 
        $(vin2[i]).attr('id', 'v' + idn + 1); 
        jsPlumb.makeTarget($(vin2[i]), { 
         maxConnections: 1, 
         scope: 'int' 
        }); 
       } else if ($(vin2[i]).hasClass('float')) { 
        $(vin2[i]).attr('id', 'v' + idn + 2); 
        jsPlumb.makeTarget($(vin2[i]), { 
         maxConnections: 1, 
         scope: 'float' 
        }); 
       } else { 
        $(vin2[i]).attr('id', 'v' + idn + 3); 
        jsPlumb.makeTarget($(vin2[i]), { 
         maxConnections: 1, 
         scope: 'char' 
        }); 
       } 
      } 
      block.appendTo($(container)); 
      jsPlumb.draggable($(idt), dragop); 
      resize(); 
     } 
+7

Это * много * кода. Не могли бы вы сузить его до частей, связанных с воссозданием проблемы в вопросе. –

+0

И, пожалуйста, исправьте свой код, чтобы он был правильно отступом, поскольку он не очень читаем, как есть. Вы можете всегда использовать что-то вроде http://jsbeautifier.org/ для исправления отступов. – jfriend00

ответ

0
var block = $(selected).clone(); 

clone() является shallow копия. Обычно любые обработчики событий, связанные с исходным элементом, не копируются в клон.

Вы должны использовать clone(true), который скопирует все события.

+0

Я знаю это, поставьте пример с клоном (true) и с clone(). Как я уже говорил выше, при использовании clone() https://jsfiddle.net/3o38nbzs/4/ перетаскивание работает при использовании клонирования (true) https://jsfiddle.net/L5mg87jm/, когда перетаскивание не работает. thx – Bollado

Смежные вопросы