2013-02-02 15 views
1

當在這個放置區域中放置某些東西時,該對象將被克隆並獲得部分類。jquery在droppable中添加的類如果外部放置事件不能調整大小

$('.drop').droppable({ 
    tolerance: 'fit', 
    accept: '.drag, .part', 
    drop: function (event, ui) { 
     var top = ui.position.top; 
     var left = ui.position.left; 
     var posizione = ui.position; 

     if ($(ui.helper).hasClass('drag')) { 
      $(this).append($(ui.helper).clone()); 
      $('#board .drag').addClass("part"); 
      $('.part').removeClass("drag"); 
     }; 
     .... 
)}; 

有辦法給doppable /拖動/調整大小的屬性設置爲「部分」類沒有做這裏面放置事件,但外面定義它?因爲使其工作的唯一方法是給予內部放置功能。

工作

$('.drop').droppable({ 
    tolerance: 'fit', 
    accept: '.drag, .part', 
    drop: function (event, ui) { 
     var top = ui.position.top; 
     var left = ui.position.left; 
     var posizione = ui.position; 

     if ($(ui.helper).hasClass('drag')) { 
      $(this).append($(ui.helper).clone()); 
      $('#board .drag').addClass("part"); 
      $('.part').removeClass("drag"); 
     }; 

     $('.part').resizable({ 
      containment: "#board", 
      aspectRatio: true 
     }); 
     .... 
)}; 

NOT WORK

$('.drop').droppable({ 
    tolerance: 'fit', 
    accept: '.drag, .part', 
    drop: function (event, ui) { 
     var top = ui.position.top; 
     var left = ui.position.left; 
     var posizione = ui.position; 

     if ($(ui.helper).hasClass('drag')) { 
      $(this).append($(ui.helper).clone()); 
      $('#board .drag').addClass("part"); 
      $('.part').removeClass("drag"); 
     }; 

     .... 
)}; 
$('.part').resizable({ 
      containment: "#workarea", 
      aspectRatio: true 
}); 

我是新來的JavaScript和jQuery,所以如果你發現其他錯誤,請報告。 感謝您的幫助。

編輯:完整的代碼http://jsfiddle.net/funnydj/qtBfJ/2/

回答

0

通過解決jQuery的收集$('.part')drop處理程序中,你會影響文檔中的所有元素class="part"

通常,只需要處理剛剛被刪除/克隆的元素,並且假定給出該元素class="part",我猜測只有它需要解決。所有以前丟棄/克隆的元素應該已經得到適當的處理。

如果我是正確的,那麼你可能想是這樣的:

$('.drop').droppable({ 
    tolerance: 'fit', 
    accept: '.drag, .part', 
    drop: function (event, ui) { 
     var top = ui.position.top; 
     var left = ui.position.left; 
     var posizione = ui.position; 

     if(ui.helper.hasClass('drag')) { 
      var $part = ui.helper.clone().removeClass("drag ui-draggable-dragging").addClass("part"); 
      $part.appendTo($(this)); 
      $part.resizable({ 
       containment: "#board", 
       aspectRatio: true 
      }); 
      $part.draggable({ 
       tolerance: 'fit', 
       revert: 'invalid', //resterà non valido finchè non droppo in un punto valido 
       containment: "#workarea", 
       stop: function() { 
        var top2 = ui.position.top; 
        var left2 = ui.position.left; 
        $("#workarea").append('<div>spostata</div>'); 
        $(this).draggable('option', 'revert', 'invalid'); //quando lo lascio torna indietro perche' il revert è invalid' 
       } 
      }); 
      $part.droppable({ 
       greedy: true, 
       //tolerance: 'intersect', 
       drop: function (event, ui) { 
        if (!$(ui.helper).hasClass('part')) { 
         ui.draggable.draggable('option', 'revert', true); 
        } 
       } 
      }); 
     }; 
     inserite++; 
     $("#workarea").append('<div>' + top + '-' + left + '--' + inserite + '</div>'); 
    } 
}); 

你可以通過定義外部範圍中選擇,地圖顯著收拾東西,但他們必須在裏面使用。

我可能會做這樣的事情:

var inserite = 0; 

part_options = { 
    resizable: function(ui) { 
     return { 
      ... 
     } 
    }, 
    draggable: function(ui) { 
     return { 
      ... 
     } 
    }, 
    droppable: function(ui) { 
     return { 
      ... 
     } 
    } 
}; 


$('.drop').droppable({ 
    tolerance: 'fit', 
    accept: '.drag, .part', 
    drop: function (event, ui) { 
     var top = ui.position.top; 
     var left = ui.position.left; 
     var posizione = ui.position; 

     if(ui.helper.hasClass('drag')) { 
      var $part = ui.helper.clone().removeClass("drag ui-draggable-dragging").addClass("part"); 
      $part.appendTo($(this)); 
      $part.resizable(part_options.resizable.call(this, ui)); 
      $part.draggable(part_options.draggable.call(this, ui)); 
      $part.droppable(part_options.droppable.call(this, ui)); 
      //or one long chained command if you prefer. 
     }; 
     inserite++; 
     $("#workarea").append('<div>' + top + '-' + left + '--' + inserite + '</div>'); 
    } 
}); 
+0

所有以前刪除/複製的元素必須保持可拖動,可放開和調整大小。這是我處理所有收藏品的原因(我想創建一種圖像臺)。如果我給類「部分」最後下降/克隆和外面我地址集合$('。部分')給droppable/draggable/resizable它不起作用(我在這裏丟失東西......如果可以的話,幫助我接着就,隨即)。 此外jquery不會刪除ui-draggable拖放後刪除一部分,所以我必須刪除每一次,不僅當div是一個拖動。無論如何,選項地圖是偉大的提示!謝謝! –

+0

'$('。part')。resizable(...)'將只處理語句執行時存在的那些'.part'元素。在你的非工作代碼中,那時不存在'.part'元素;部分,稍後創建,以響應拖放操作。在我的代碼中,droppped部分將保持可拖動狀態等,而不需要重新解析整個'.part()'集合。據我所知,只有新創建的部分需要在創建後立即解決。看[更新的小提琴](http://jsfiddle.net/qtBfJ/4/)。 –

+0

太棒了!現在一切都很清楚!我會繼續工作,如果我會有更多麻煩,我希望你能再次幫助我。謝謝!!! –

相關問題