Javascript.RU

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

Помогите с 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 += "&nbsp;";
          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>'));
        }
    });
 
});

Подскажите, что я не так делаю?
Ответить с цитированием
  #2 (permalink)  
Старый 31.08.2011, 16:11
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

http://stackoverflow.com/questions/1...ng-live-events
решение в первом ответе, и в последующих тоже.
Ответить с цитированием
  #3 (permalink)  
Старый 31.08.2011, 18:20
Новичок на форуме
Отправить личное сообщение для ansi19 Посмотреть профиль Найти все сообщения от ansi19
 
Регистрация: 31.08.2011
Сообщений: 5

А можно немного подробней, я не очень хорошо владею английским. Как мне код
(function ($) {
	   $.fn.liveDraggable = function (opts) {
	      this.live("mouseover", function() {
	         if (!$(this).data("init")) {
	            $(this).data("init", true).draggable(opts);
	         }
	      });
	   };
	}(jQuery));

адаптировать под свой пример.
Ответить с цитированием
  #4 (permalink)  
Старый 31.08.2011, 18:26
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Вместо $element.draggable использовать liveDraggable
Ответить с цитированием
  #5 (permalink)  
Старый 31.08.2011, 18:34
Новичок на форуме
Отправить личное сообщение для ansi19 Посмотреть профиль Найти все сообщения от ansi19
 
Регистрация: 31.08.2011
Сообщений: 5

пробовала, все равно не работает
Ответить с цитированием
  #6 (permalink)  
Старый 31.08.2011, 19:18
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Я только что проверил: работает. Что-то не так делаете. Показывайте код.
Ответить с цитированием
  #7 (permalink)  
Старый 31.08.2011, 19:49
Новичок на форуме
Отправить личное сообщение для ansi19 Посмотреть профиль Найти все сообщения от ansi19
 
Регистрация: 31.08.2011
Сообщений: 5

я заменяю 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>'));
        }
    });
});

для первых элементов срабатывает, для тех что появляются после нажатия кнопки, нет.
Ответить с цитированием
  #8 (permalink)  
Старый 31.08.2011, 23:47
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

А стоп, я невнимателен. У вас же нужно чтобы 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>'));
    }
});
Ответить с цитированием
  #9 (permalink)  
Старый 01.09.2011, 12:44
Новичок на форуме
Отправить личное сообщение для ansi19 Посмотреть профиль Найти все сообщения от ansi19
 
Регистрация: 31.08.2011
Сообщений: 5

Спасибо за помощь! я сделала вот так:
(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>'));
        }
    });
});

Но проблема теперь в том, что все перетаскивается со второй попытки, может подскажите, что дает такую задержку.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Люди помогите! Как отключить css для ОПЕРЫ МИНИ??? griha787 Элементы интерфейса 1 13.04.2011 20:10
Drag&Drop не пашет помогите, я нуб, нужен совет bookin Элементы интерфейса 0 16.09.2010 14:00
dragSelector для iframe помогите написать Golizart ExtJS 0 25.07.2010 15:35
Помогите написать скрипт для корзины Deep Элементы интерфейса 1 19.06.2010 14:46