Drag And Drop Issue Jquery
Solution 1:
You will need to avoid using HTML id
for this and start using classes. Here is how to do that, with a working example:
Your HTML:
<divid="draggable_2"class="ui-widget-content draggable-item"><p>draggable_2</p></div><divid="draggable"class="ui-widget-content draggable-item"><p>draggable</p></div><divclass="ui-widget-header droppable-item"data-accept="#draggable"><p></p></div><divclass="ui-widget-header droppable-item"data-accept="#draggable_2"><p></p></div><divclass="ui-widget-header droppable-item"data-accept="#draggable_3"><p></p></div>
Your javascript:
$(function () {
$(".draggable-item").draggable();
$('.droppable-item').each(function (i, ele) {
// Gets the accepted from the HTML property "data-accept"var accept = $(this).data('accept');
// This is just to show what the item accepts. you can remove it.
$(this).find('p').text('accepts: ' + accept);
// Init the jQuery UI droppable()
$(this).droppable({
accept: accept,
drop: function (event, ui) {
$(this)
.removeClass("ui-widget-header")
.addClass("ui-state-highlight")
.find("p")
.html("Dropped!");
},
out: function (event, ui) {
$(this).removeClass("ui-state-highlight").addClass("ui-widget-header")
.find("p")
.html("accept: " + accept);
}
});
});
});
Solution 2:
If I understand your question correctly, you want every draggable to be droppable only its droppable and no other droppable div.
You've already achieved this by adding the accept: "#draggable"
in your code for every droppable
.
You can add this extra line of code so that if your draggable is dropped anywhere other than its droppable, it will go back to its droppable.
$( "#draggable, #draggable2" ).draggable({ revert: "invalid" });
This code can be shortened if you added the same class (like class=draggables
to every draggable html element and then you can juse use
$( ".draggables" ).draggable({ revert: "invalid" });
to mark them all.
Here is a jsfiddle to show the example.
Post a Comment for "Drag And Drop Issue Jquery"