2014-10-03 73 views
1

我有两列之间,我可以拖放列表项。左边,我只有一个完整的工作人员列表,我有多个列表来分配一个成员到一个函数。如何检查值是否存在与jQuery列表

为了确保我可以从左向右多次拖拽一个成员(每个员工可以有多个函数),我使用cloneNode。现在我正在寻找一种方法来防止在同一名单中放弃同一名员工两次。 我尝试这样做,但不成功的:

if (dropToID == "#lmn") { 
     if (($("#lmn li[value=" + data + "]").length) != 0) { 
      $(dropToID).append(document.getElementById(data).cloneNode(true));    
      $("#hiddenValueMember"+data).attr("name", "selectedLMN[]"); 
      save(); 
     } 
    } 
+0

什么是你想实现与'$( “#hiddenValueMember” +数据)'? – 2014-10-03 21:59:42

+0

@FrédéricHamidi起初我只是用了一个有价值的li。但是,拖动时似乎无法获得正确的drop-id。我遇到这个问题后,我会再试一次。 – bflydesign 2014-10-04 11:17:03

+0

@FrédéricHamidi我忘了说我使用隐藏的成员来保存值。它也必须让它与li值一起工作,我想...... – bflydesign 2014-10-04 11:42:19

回答

1

我刚刚创建了一个小例子,如何可以做到这一点:Fiddle

每当员工在任务回落,员工ID添加到作为数据属性存储在任务上的数组。如果员工已被分配到该任务,则不能再次添加他/她。
这不是完整版本,我没有关心如何从指定的任务中删除员工并相应地调整数组,这只是一个示例,如何解决该问题,避免将同一员工分配给同一个任务两次。如果这可以满足您的要求,将其调整为适用于您现有的员工和任务列表应该不成问题。
在小提琴中,我保存了console.log消息,因此更容易检查不同数组/数据属性中已有的内容。

$(function() { 
    $(".people").draggable({ 
    containment: ".container", 
    helper: 'clone' 
}); 

$("#tasks li").droppable({ 
    accept: '.people', 
    greedy: true, 
    drop: function (e, ui) { 
     var newOne = ui.draggable.clone().removeAttr("style"), 
      jobId = $(this).attr("id"), 
      peopleId = newOne.attr("id"); 

     if (false === arrayHelper(jobId, peopleId)) { 
      alert(peopleId + " already assigned to " + jobId); 
     } else { 
      $(this).find("ul").append(newOne); 
     } 

     arrayHelper(jobId, peopleId); 
     } 
    }); 

}); 

function arrayHelper(task, people) { 

    if ($("#" + task).data("people") == "") 
    { 
    holder = []; 
    holder.push("#" + people); 
    $("#" + task).data("people", holder); 
    } 
    else 
    { 
    if ($.inArray("#" + people, holder) != -1) 
    { 
     return false; 
    } 
    else 
    { 
     holder.push("#" + people); 
     $("#" + task).data("people", holder); 
    } 
    } 
} 

HTML这个例子:

<div class="container"> 
    <ul id="tasks"> 
     <li id="task1" data-people="">typing 
     <ul></ul> 
     </li> 
     <li id="task2" data-people="">phone 
     <ul></ul> 
     </li> 
     <li id="task3" data-people="">letters 
     <ul></ul> 
     </li> 
    </ul> 
    <div class="divide"></div> 
    <ul id="people"> 
     <li class="people" id="people1">peter</li> 
     <li class="people" id="people2">paul</li> 
     <li class="people" id="people3">mary</li> 
    </ul> 
</div>