我有一個可從源列表拖動到包含在表單元素中的目標列表的項目列表。這對於一個目的地列表工作正常,因爲可以靜態指定'name'屬性。但是,我試圖找出一種方法來支持多個目標列表,並且我認爲如果我可以從目標列表中獲取ID並將其作爲名稱屬性動態添加到輸入字段,因爲它被放入可排序列表中列表中,每個列表可以作爲單獨的數組提交。我的排序,可拖動和投擲的功能我希望的方式工作正好與下面的代碼:使用jQuery將項目屬性下載到可排序列表中時修改項目的屬性
<div>
Available Items
<ul id="avail">
<li><input type="hidden" name="options[]" value="1">Option 1</li>
<li><input type="hidden" name="options[]" value="2">Option 2</li>
<li><input type="hidden" name="options[]" value="3">Option 3</li>
<li><input type="hidden" name="options[]" value="4">Option 4</li>
</ul>
</div>
<p class="clear"></p>
<form action="myForm.php" method="post" enctype="multipart/form-data">
<div style="float:left;">
List #1
<ul class="sortable" id="list1">
</ul>
</div>
<div style="float:left;margin-left:5px;">
List #2
<ul class="sortable" id="list2">
</ul>
</div>
<div class="clear"></div><br>
</form>
及以下的jQuery:
$('#avail li').draggable({
connectToSortable: ".sortable",
helper: "clone",
opacity: 0.75,
});
var sortableIn;
$('.sortable').sortable({
receive: function(event, ui) {
sortableIn = 1;
},
over: function(event, ui) {
sortableIn = 1;
},
out: function(event, ui) {
sortableIn = 0;
},
beforeStop: function(event, ui) {
if (sortableIn == 0) {
ui.item.remove();
}
}
}).droppable({
greedy: true
});
你可以看到它在行動上this fiddle。因此,基於這個例子總結,當一個選項被放入這些列表之一時,我試圖用'list1 []'或'list2 []'替換'option []'作爲輸入字段的名稱屬性。
我假設我需要在「receive」函數或「drop」函數中使用類似於attr('name',$(this).attr('id'))的東西,但我不是確切地確定將它放在哪裏以及如何將輸入字段定義爲attr()的目標而不是包含<li>
。
解決方案: 我改變了receive
功能update
並添加曲折的第二代碼片段它,因此它現在看起來像:
update: function(event, ui) {
sortableIn = 1;
ui.item.find("input").attr("name", $(this).attr("id") + '[]');
}
我們不在這裏的標題中做「已解決」。如果您找到自己的答案,請刪除您的問題或在下面回答並將其標記爲已接受。 – j08691
謝謝你的頭。這是我第一次在SO上發佈。雖然,您的評論的相關性可能已通過注意到下面已提供並接受的答案而得到改進。 – KenC