将值传递给可拖放数组

Passing values to arrays with draggable and droppable

本文关键字:拖放 数组 值传      更新时间:2023-09-26

我需要有人来帮助我与jQuery可拖放。

  1. 当物品拖放时,推送/弹出值到喜欢/讨厌数组。
  2. 当项目离开喜欢/讨厌框,他们可以回到他们来自哪里,正确的div框。

我不明白为什么当我放/放盒子给我2个名字为一个项目,虽然现在我可以使用$.unique(),但它不是实践在所有。我已经尝试了很多方法,但不确定如何弹出值喜欢/仇恨阵列时,项目取出。非常感谢!

我的代码在这里

  Like = [];
  Hate = [];
$(function () {
    $("#AllTable .test").draggable({
        appendTo: "body",
        helper: "clone",
        revert: "invalid",
    });
    $(".LikeBox div").droppable({
        drop: function (event, ui) {
            var $item = ui.draggable;
            $item.appendTo("#likeTable");
            var ingre = $item.text();
            alert(ingre);
            Like.push(ingre);
            Like = $.unique(Like)
        }
    });
    $(".HateBox div").droppable({
        drop: function (event, ui) {
            var $item = ui.draggable;
            $item.appendTo("#hateTable");
            var ingre = $item.text();
            Hate.push(ingre);
            Hate = $.unique(Hate)
        }
    });
    $(function () {
        $('.IngreMainCat').accordion();
    });
});
编辑:

我的新代码是这样的,问题1解决了:

Like = [];
Hate = [];
$(function() {
  $( "#AllTable .test" ).draggable({
    appendTo: "body",
    helper: "clone",
    revert: "invalid",
  });
  $( ".LikeBox .droptrue" ).droppable({
    drop: function( event, ui ) {
      var $item = ui.draggable;
      $item.appendTo("#likeTable");
      var ingre = $item.text();
      Like.push(ingre);
      if($.inArray(ingre,Hate) > -1){
        var index = Hate.indexOf(ingre);
        if (index > -1) {
          Hate.splice(index, 1);
        }
      }
    } 
  }); 
  $( ".HateBox .droptrue" ).droppable({
    drop: function( event, ui ) {
      var $item = ui.draggable;
      $item.appendTo("#hateTable");
      var ingre = $item.text();
      Hate.push(ingre);
      if($.inArray(ingre,Like) > -1){
        var index = Like.indexOf(ingre);
        if (index > -1) {
          Like.splice(index, 1);
        }
      }
    } 
  });
});  

你实际上有2个div是可拉的,因为你的选择器。因为你调用了.LikeBox的所有子div,你得到了这2个运行drop函数的dropables:

  <div>
  <div id="likeTable" class="droptrue">

在调用了droppable之后,它看起来是这样的,参见ui-droppable在两者上:

<div class="ui-droppable">
      <div id="likeTable" class="droptrue ui-droppable">

澄清你的选择器,你应该不会有问题。例如:

$( ".LikeBox .droptrue" ).droppable({

参见工作小提琴:https://jsfiddle.net/2ets9hjg/

编辑:

对于要从数组中删除的元素,一个建议:而不是使用pushpop并跟踪您在表中添加和删除的内容,您可以在需要时map您的表。参见jquery map: http://api.jquery.com/jquery.map/。这样更容易记录。这样的:

Like = $.map($( "#likeTable div" ),function(a){return a.textContent});
https://jsfiddle.net/2ets9hjg/4/