Drag & Drop Clone - PullRequest
       13

Drag & Drop Clone

2 голосов
/ 03 августа 2011

Я использую jquery Draggables с сортируемым. У меня есть список элементов слева, которые мне нужно перетащить в разные элементы справа. Можно поместить одни и те же элементы слева в несколько полей, поэтому я использовал helper: «clone». Все работает хорошо, пока мне не нужно получить ссылку на новый элемент, который был клонирован в событии receive, чтобы я мог добавить обработчик щелчков к нему.

Мне нужна ссылка на новый элемент!

<div>
        <div style="float: left; width: 300px;">
            <div id="FieldList">
                <h2>Loading</h2>            
            </div>
            <input type="button" name="cmdTest" id="cmdTest" value="Test" />
    </div>
    <div style="float: right; width: 300px;">
        <div>
            <div>Select Columns</div>
            <div class="Toolbar"></div>
            <div id="SelectFields" class="DroppableField">

            </div>
        </div>
        <div>
            <div>Conditions</div>
            <div class="Toolbar"></div>
            <div class="DroppableField" style="background-color: Gray; height: 200px;">

            </div>
        </div>
        <div>
            <div>Order</div>
            <div class="Toolbar"></div>
            <div class="DroppableField" style="background-color: Gray; height: 200px;">

            </div>
        </div>
    </div>
    <div style="clear: both;">
    </div>
</div>

Javascript:

$(document).ready(function () {

        $(".DroppableField").sortable({
            revert: true,
            receive: function (ui, event) { 
                // ui.helper always seems to be null. Many of the other properties seem to reference the original item.  I need the NEW ONE!!!                  
                $(ui.helper).dblclick(function () {

                });
            }
        });

        $.ajax({
            url: "/condition/getconditions",
            data: {},
            dateType: "json",
            type: "POST",
            success: function (data, successcode, jqXHR) {
                var html = "";
                for (var i = 0; i < data.length; i++) {
                    $("#FieldList").append("<div>" + data[i].Description + "</div>").find("div:last").data("fielddata", data[i]);
                    //html += ;
                }

                $("#FieldList div").draggable({
                    connectToSortable: ".DroppableField",
                    helper: "clone",
                    revert: "invalid"
                });
            }
        });

    });

1 Ответ

1 голос
/ 04 августа 2011

Вы, кажется, инвертировали два параметра, которые получает функция обратного вызова.

receive: function (ui, event) { 

}

Должно быть

receive: function (event, ui) { 

}

Согласно Документациям jQuery UI :

Все обратные вызовы получают два аргумента: исходное событие браузера и подготовленный объект пользовательского интерфейса [...]

...