可拖动的jQuery元素——入门父级()元素

5
我希望使用jQuery实现拖放功能。
目前我有一个“存储”区域,其中包含多个项目。
另一边有x个盒子,每个盒子只能容纳一个项目。
目前,我使用droppable函数在盒子上设置另一个类,仅允许添加1个项目。
 $( ".droppable" ).droppable({
     accept: ".draggable",
     activeClass: "draghover",
     drop: function( event, ui ) {
         if($( this ).hasClass("droppable")) {
             $( this ).removeClass("droppable").addClass( "droppable-");
         }
     } });

现在,当我把物品移回到存储区或另一个盒子时,我需要恢复类。我尝试使用可拖动的start函数来实现,但是我无法获取正确的parent()。

$( ".draggable" ).draggable({
        revert: "invalid",
        snap: ".droppable",
        snapMode: "inner",
        start: function( event, ui ) {
            alert($( this ).parent().attr("Class"));

        }
    });

这将始终返回第一个拖动之前的起始位置,而不是最新位置。

存储看起来像:

<td valign="top" class="warenlager" bgcolor="grey" width="200">
    <div class="draggable" class="bild ui-widget-content" id="s73-1">S</div>
    <div class="draggable" class="bild ui-widget-content" id="s74-1">S</div>
</td>

盒子长这样:

<td><div class="droppable" id="element 2"></div></td>

敬礼

3个回答

3

如果你想在可拖动元素从可放置区域中移除后恢复盒子的类(我认为这就是你所询问的),那么请使用out事件处理程序,代码应该如下:

 $( ".droppable" ).droppable({
 accept: ".draggable",
 activeClass: "draghover",
 drop: function( event, ui ) {
     if($( this ).hasClass("droppable")) {
         $( this ).removeClass("droppable").addClass( "droppable-");
     }
 },
 out: function()
 {
     $(this).addClass("droppable").removeClass( "droppable-");
 }
 });

希望这能有所帮助 :)

0
你可以这样做(使用ES6):

在线演示(jsfiddle)

// Create a class for dragged element
// I will create a new instance form this class when drag
function draggedElement(elementId, parentId) {
  this.id = elementId,
  this.parentId = parentId
};

// Array of dragged elements
// This array use for store dragged elements and their parent's id
var draggedElementList = [];

$('.draggable').draggable({
  start: function(event, ui) {
    // Store or update parent's id  
    updateDraggedElementList($(this).attr("id"), $(this).parent().attr("id"));
  }
});

// This method used for update or store draaged elemens and their parent's id
function updateDraggedElementList(elementId, parentId) {

  // Create new instance
  var element = new draggedElement(elementId, parentId);

  // Check element has already been added or not
  var foundIndex = draggedElementList.findIndex(el => el.id == element.id);
  if (foundIndex > -1)
    draggedElementList[foundIndex] = element;
  else
    draggedElementList.push(element);

  // Print dragged elements and their parents
  printDraggedElements();
}

// I wrote this method for test
function printDraggedElements() {
  for (var i = 0; i < draggedElementList.length; i++) {
    console.log(draggedElementList[i].id);
    console.log(draggedElementList[i].parentId);
  }
}

-1

我知道这不是最近的事情,但获取可拖动项的父元素的一种方法是使用可拖动的开始事件。

$( ".draggable" ).draggable({
    revert: "invalid",
    snap: ".droppable",
    snapMode: "inner",
    start: function( event, ui ) {
        alert(event.currentTarget.parentElement);
    }
});

console.log(event.currentTarget.parentElement); 是 null! - numediaweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接