【问题标题】:draggable jquery get start parent() element可拖动的jQuery获取开始父()元素
【发布时间】:2012-08-21 10:16:33
【问题描述】:

我想用juery拖放物品。

现在我确实有一个包含多个项目的“存储”。

在另一个网站上,我有 x 个盒子。每个盒子只能包含 1 个项目。

现在,我使用 droppable 功能在盒子上设置另一个类,只能添加 1 个可以工作的盒子:

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

现在,当我将物品移回存储空间或另一个盒子时,我需要恢复 Class。 我用 draggable.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>

问候

【问题讨论】:

    标签: jquery drag-and-drop jquery-ui-draggable


    【解决方案1】:

    如果你想在可拖动元素从 droppable 中删除后恢复盒子的类(我想你是这样问的)然后使用 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-");
     }
     });
    

    希望这会有所帮助:)

    【讨论】:

      【解决方案2】:

      你可以这样做(ES6):

      Online demo (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);
        }
      }
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • console.log(event.currentTarget.parentElement);为空!
        猜你喜欢
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多