Помогите с 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, время: 22:58. |