Что ж, мне самому удалось найти ответ.
Сначала разбейте перетаскиваемый / сбрасываемый код следующим образом:
/* jquery draggable/droppable */
$(function(){
$(".draggable").draggable({
revert : function(event, ui){
$(this).data("uiDraggable").originalPosition = {top : 0,left : 0};
return !event;
},
containment : "#img-id",
cancel: false
});
});
function makeDroppable(){
$('.snap-item').droppable({
tolerance: "fit",
accept: ".draggable",
activeClass: "highlight",
drop: function(event, ui){
if(!confirm("Are you sure?")){
ui.draggable.css({top: 0,left: 0});
ui.helper.css({"background-color": ""});
}else{
console.log('dragged ' + ui.draggable.data('dragitem') + ' onto ' + $(this).data("myval")); // dragitem
$(this).removeClass("highlight").addClass("green");
}
},
out: function (event, ui) {
ui.helper.css({"background-color": ""});
$(this).removeClass("green");
}
});
});
}
А затем просто добавьте makeDroppable ( ) в конце вызова ajax, например:
/* jquery ajax code to get data from database */
$.ajax({
type: "POST",
url: "queries/getCategories.php",
dataType: 'json',
cache: false,
data:{store_id:storeid},
success: function(data){
$.each(data,function(i,j){
$("#dynamic").append("<div class='snap-item ui-widget-header' data-myval='myval2' style='left:" + j.left_pos + "%; top:" + j.top_pos + "%'>Testarea " + j.category_id + "</div>");
console.log("top " + j.top_pos);
makeDroppable(); // ADDED THIS !!
});
}
});
Таким образом, вы не инициализируете действие удаления, пока все div не будут добавлены в DOM.
Надеюсь, это кому-нибудь поможет!