Помогите с Drag&Drop для новых eлементов
У меня есть два Span блока, куда я перетаскиваю текст. Кнопка Add добавляет новые Span блоки, но в них не удается перетаскивать текст. Помогите понять почему не работает Drag&Drop для новых блоков.
Первый файл jsp: <script type="text/javascript" src="../js/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="../js/jquery-ui-1.8.custom.min.js"></script> <script type="text/javascript" src="../js/init.js"></script> <style> .textBlock { color: white; font-weight: bold; background-color: #0F3764; border-bottom: 2px solid #0F3764; border: solid 1px #cecece; width: auto; position: static; margin: 1px 2px 1px 2px; padding: auto; text-align: center; } .folgt { border: 2px solid #0F3764; margin: 1px 2px 1px 2px; padding: auto; height: 20px; width: 130; background-color: #rrr; text-align: center; } .dropHere { background-color: #000000; } </style> <span class="textBlock">Text1</span> <span class="textBlock">Text2</span> <span class="textBlock">Text3</span> <span class="textBlock">Text4</span> <script language="JavaScript" type="text/javascript"> var textId = 2; function addInput(btn) { var container = btn.parentElement; var div = document.createElement("div"); div.id = "div" + textId; var first = document.createElement("<span class=\"folgt\">" + textId + "</span>"); var middle = document.createElement("<span class=\"folgt\">" + textId + "</span>"); var btn = document.createElement("INPUT"); btn.type = "button"; btn.value = "Delete"; btn.onclick = new Function("document.getElementById(\"" + div.id + "\").removeNode(true);"); div.appendChild(first); div.appendChild(middle); div.innerHTML += " "; div.appendChild(btn); container.appendChild(div); textId++; } </script> <form action="page2.jsp" method="POST"> <span class="folgt"></span><span class="folgt"></span> <input type="button" value="Add" onclick="addInput(this);"> <br /> </form> -------------------------------------------- для перетаскивания я использую плагин jQuery --------------------------------------------- $(function() { $( '.drag' ).draggable({ helper:'clone' }); $('.textBlock').draggable({ helper:'clone' }); $('.folgt').droppable({ hoverClass: 'dropHere' ,drop: function(event, ui) { $(this).append($( '<span>' + ui.draggable.html()+ '</span>')); } }); }); Подскажите, что я не так делаю?:help: |
http://stackoverflow.com/questions/1...ng-live-events
решение в первом ответе, и в последующих тоже. |
А можно немного подробней, я не очень хорошо владею английским. Как мне код
(function ($) { $.fn.liveDraggable = function (opts) { this.live("mouseover", function() { if (!$(this).data("init")) { $(this).data("init", true).draggable(opts); } }); }; }(jQuery)); адаптировать под свой пример. |
Вместо $element.draggable использовать liveDraggable
|
пробовала, все равно не работает :(
|
Я только что проверил: работает. Что-то не так делаете. Показывайте код.
|
я заменяю Draggable на liveDraggable, вот код:
(function ($) { $.fn.liveDraggable = function (opts) { this.live("mousemove", function() { $(this).draggable(opts); }); }; }(jQuery)); $(function() { $( '.drag' ).liveDraggable({ helper:'clone' }); $('.textBlock').liveDraggable({ helper:'clone' }); $('.folgt').droppable({ hoverClass: 'dropHere' ,drop: function(event, ui) { $(this).append($( '<span>' + ui.draggable.html()+ '</span>')); } }); }); для первых элементов срабатывает, для тех что появляются после нажатия кнопки, нет. |
А стоп, я невнимателен. У вас же нужно чтобы live вешались на droppable, а не draggable. Чего молчите?
Два варианта. 1. По аналогии использовать liveDroppable: $.fn.liveDroppable = function (opts) { this.live("mouseenter", function() { if (!$(this).data("init")) { $(this).data("init", true).droppable(opts); } }); }; 2. После того, как вы создаете новые span, вызывайте для них опять инициализацию droppable: $('.folgt').droppable({ hoverClass: 'dropHere', drop: function(event, ui) { $(this).append($( '<span>' + ui.draggable.html()+ '</span>')); } }); |
Спасибо за помощь! я сделала вот так:
(function ($) { $.fn.liveDroppable = function (opts) { this.live("mousemove", function() { $(this).droppable(opts); }); }; }(jQuery)); $(function() { $( '.drag' ).draggable({ helper:'clone' }); $('.textBlock').draggable({ helper:'clone' }); $('.folgt').liveDroppable({ hoverClass: 'dropHere' ,drop: function(event, ui) { $(this).append($( '<span>' + ui.draggable.html()+ '</span>')); } }); }); Но проблема теперь в том, что все перетаскивается со второй попытки, может подскажите, что дает такую задержку. :-? |
Часовой пояс GMT +3, время: 02:57. |