2014-10-03 71 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>