2011-12-30 54 views
4

場景:我希望我的用戶能夠通過將產品拖放到可排序列表&可排序列表中來創建購物列表。根據產品在列表中的位置以及產品的價值,必須填寫此表單的文本字段。如何使用jQuery UI的droppable來排序和創建多個文本字段?

的jsfiddlehttp://jsfiddle.net/imjp/5NWAQ/1/

例如:

  • 橙色
  • 蘋果
  • 香蕉

生成我的表單字段中輸入以下值(基於當然對data-product attribute):

  • ITEM_1:橙色
  • ITEM_2:蘋果
  • ITEM_3:香蕉

如果我中移動的蘋果後,該領域還必須更新此。

下面是一些HTML我已經把:

<div class="demo"> 

<div id="products"> 
<h1 class="ui-widget-header">Products</h1>  
<div id="catalog"> 
    <h3><a href="#">T-Shirts</a></h3> 
    <div> 
     <ul> 
      <li data-product="Lolcat Shirt">Lolcat Shirt</li> 
      <li data-product="Cheezeburger Shirt">Cheezeburger Shirt</li> 
      <li data-product="Buckit Shirt">Buckit Shirt</li> 
     </ul> 
    </div> 
    <h3><a href="#">Bags</a></h3> 
    <div> 
     <ul> 
      <li>Zebra Striped</li> 
      <li>Black Leather</li> 
      <li>Alligator Leather</li> 
     </ul> 
    </div> 
    <h3><a href="#">Gadgets</a></h3> 
    <div> 
     <ul> 
      <li>iPhone</li> 
      <li>iPod</li> 
      <li>iPad</li> 
     </ul> 
    </div> 
</div> 
</div> 

<div id="cart"> 
<h1 class="ui-widget-header">Shopping Cart</h1> 
<div class="ui-widget-content"> 
    <ol> 
     <li class="placeholder">Add your items here</li> 
    </ol> 
</div> 
</div> 
<div id="cart"> 
<h1 class="ui-widget-header">Shopping Cart</h1> 
<div class="ui-widget-content"> 
    <ol> 
     <li class="placeholder">Add your items here</li> 
    </ol> 
</div> 
</div> 


<div id="list_1" style="clear: both; float: left;"> 
    <h3>List 1</h3> 
<input id="list_1_item_1" type="text"> 
<input id="list_1_item_2" type="text"> 
</div> 

<div id="list_2" style="clear: both; float: left;"> 
     <h3>List 2</h3> 
    <input id="list_2_item_1" type="text"> 
<input id="list_2_item_2" type="text"> 
</div> 
</div><!-- End demo --> 

的JavaScript(記住,JavaScript代碼是不工作像我想它,它更新所有具有相同值的字段):

$("#catalog").accordion(); 
    $("#catalog li").draggable({ 
     appendTo: "body", 
     helper: "clone" 
    }); 
    $("#cart ol").droppable({ 
     activeClass: "ui-state-default", 
     hoverClass: "ui-state-hover", 
     accept: ":not(.ui-sortable-helper)", 
     drop: function(event, ui) { 
      $(this).find(".placeholder").remove(); 
      console.log(ui.draggable.length); 
    $('#list_1_item_1').val(ui.draggable.data('product')); 
    $('#list_1_item_2').val(ui.draggable.data('product')); 

    $('#list_2_item_1').val(ui.draggable.data('product')); 
    $('#list_2_item_2').val(ui.draggable.data('product')); 
      $("<li></li>").text(ui.draggable.text()).appendTo(this); 
     } 
    }).sortable({ 
     items: "li:not(.placeholder)", 
     sort: function() { 
      // gets added unintentionally by droppable interacting with sortable 
      // using connectWithSortable fixes this, but doesn't allow you to customize active/hoverClass options 
      $(this).removeClass("ui-state-default"); 
     } 
    }); 
+0

請檢查你的小提琴。對於我來說,在這個例子中根本沒有拖拽工作。 – kontur 2011-12-30 07:23:53

+0

對不起那個男人。固定! – imjp 2011-12-30 07:26:51

+0

你在用什麼'?換句話說,如果您使用它們來提交表單,您可以在提交時計算結果,而不是每次更新購物清單? – PPvG 2011-12-30 09:01:59

回答

2

據我瞭解,你需要能夠動態地創建/更新輸入字段時:

一)項拖動並從物品掉落手風琴任何車

二)項內任何車的重新排序(可排序)

檢查這個搗鼓實施:http://jsfiddle.net/CzKn9/3/

在你的小提琴,我可以看到你所使用的相同id正確多個元素(2個元素與id'購物車')。這是你應該避免的,因爲id屬性被設計爲唯一標識DOM樹中的一個元素。 (例如,如果您執行document.getElementById('x')且多個元素的ID爲'x',則只會獲得與該ID匹配的第一個元素)。我修改了你的代碼來糾正這個問題。

其次,我添加了一個函數,用於在每次拖放或排序事件時重新創建輸入字段(將提交表單到服務器時提交)。創建的輸入字段的ID爲list_1_item_1list_1_item_2,list_2_item_1list_1_item_2等。

希望這會有所幫助。

UPDATE

ID指數增量加入。檢查這個小提琴:http://jsfiddle.net/CzKn9/4/

+0

謝謝你!你搖滾! :D – imjp 2012-01-07 04:58:24

+1

不客氣。很高興我能夠幫助。 :) – techfoobar 2012-01-07 14:55:00

+0

嘿男人有什麼我需要幫助完成我的表單工作。對於每個添加到可拖拽列表中的項目,如何將'list_1_item_1'增加到'list_1_item_2'?因爲現在列表中的所有項目都是'list_1_item_1',即使您有5個不同的項目。表單將以這種方式接受列表中的最後一項。 – imjp 2012-01-07 20:39:47

2

試試這個小提琴:

http://jsfiddle.net/5NWAQ/5/

使用可排序的停止事件檢索最頂層的li值並將其添加到輸入。

+0

幹得好!唯一的問題是當物品被拖拽到購物車時它仍然填滿整個表單。我們如何解決這個問題? – imjp 2011-12-30 08:30:40

+1

看看http://jsfiddle.net/5NWAQ/8/ - 你需要用動態的引用替換$('#item_1')和$('#item_2')引用;我使用了數據圖表屬性來識別當前可排序的數據。另外,請注意,您不止一次擁有html id屬性!此外,您可以使用prependTo而不是appendTo,因此添加的項目會在拖動後自動位於列表頂部。不要羞於接受答案 - 人們將來更有可能回答你的問題。 – kontur 2011-12-30 09:09:12

+0

這就是爲什麼我需要幫助;我的JavaScript是在初學者的水平相比,我的紅寶石鐵軌上,HTML,CSS等。我幾乎不瞭解JavaScript的語法,並知道可用的功能。 我只是想解決這個問題,我可以在我的應用程序中實現它。如果你能在jsfiddle中做到這一點,我會接受你的問題:D – imjp 2011-12-30 09:19:50

相關問題