javascript - 如何使用 jquery 从列表中获取 ul li 的值
问题描述
我有三个待处理、正在进行和已完成的列表。我只想获取从字典中获取的待处理列表的值。因此,我无法在 DB 中插入值。并且还想知道如何在挂起的任务拖放到已完成列表时更改状态值,以便在数据库中将状态更改为已完成。我浏览了一些通过 Internet 提供的解决方案,但由于我是编码世界的新手,所以找不到所需的解决方案。
HTML
<div>
<div class="row">
<div class="column">
<div class="container">
<h2>Pending</h2> <br>
<ul id="sortable1" class="droptrue">
{% for i in task %}
<li class="ui-state-default">{{i.task_name}}</li>
{% endfor %}
</ul>
</div>
</div>
<div class="column">
<div class="container">
<h2>In Progress</h2> <br>
<ul id="sortable2" class="dropfalse">
<li class="ui-state-highlight">a</li>
<li class="ui-state-highlight">b</li>
<li class="ui-state-highlight">c</li>
<li class="ui-state-highlight">d</li>
<li class="ui-state-highlight">e</li>
</ul>
</div>
</div>
<div class="column">
<div class="container">
<h2>Completed</h2> <br>
<ul id="sortable3" class="droptrue">
<li class="ui-state-highlight">A</li>
<li class="ui-state-highlight">B</li>
<li class="ui-state-highlight">C</li>
</ul>
</div>
</div>
</div>
</div>
jQuery
$(function() {
$( "ul.droptrue" ).sortable({
connectWith: "ul"
});
$( "ul.dropfalse" ).sortable({
connectWith: "ul",
dropOnEmpty: true
});
$( "#sortable1, #sortable2, #sortable3" ).disableSelection();
} );
$(function () {
$("#sortable1, #sortable2, #sortable3").sortable({
connectWith: "ul",
update: function (event, ui) {
var data = $(ui.droptrue).children("li:first").find('li').val();
alert(data)
$.ajax({
type: "POST",
url: "{% url '' %}",
data: "data",
dataType: "json",
success: function (data) {
}
});
}
}).disableSelection();
});
解决方案
Consider the following.
$(function() {
function sendData(u, d) {
$.ajax({
type: "POST",
url: u,
data: d,
dataType: "json",
success: function(data) {
return data
},
error: function(x, s, e) {
console.log("Ajax Error:", u, s, e);
return false;
}
});
}
function sortUpdate(e, ui) {
var list = $(e.target);
var id = list.attr("id");
var myData = "action=updateList&list=" + id +"&";
myData += $("li", list).map(function() {
var val = $(this).text().trim();
return id + "[]=" + val;
}).get().join("&");
console.log("Sending Data To:", "{% url '' %}");
console.log("Data:", myData);
sendData("{% url '' %}", myData);
}
$("ul.droptrue").sortable({
connectWith: "ul.droptrue",
update: sortUpdate,
placeholder: "sortable-placeholder"
});
$("ul.dropfalse").sortable({
connectWith: "ul.droptrue",
dropOnEmpty: false,
update: sortUpdate
});
$(".sortable").disableSelection();
});
h2 {
padding: 0.2em 0.4em;
margin: 0;
border-bottom: 1px solid #222;
}
.column {
width: 340px;
}
.container ul {
padding: 0;
margin: 10px 5px;
list-style: none;
}
.container ul li {
padding: 0.2em;
margin-bottom: -1px;
}
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div>
<div class="row">
<div class="column">
<div class="container">
<h2>Pending</h2>
<ul id="pending" class="sortable droptrue">
<li id="pending_1" class="ui-state-default">Task 1</li>
<li id="pending_2" class="ui-state-default">Task 2</li>
<li id="pending_3" class="ui-state-default">Task 3</li>
<li id="pending_4" class="ui-state-default">Task 4</li>
<li id="pending_5" class="ui-state-default">Task 5</li>
</ul>
</div>
</div>
<div class="column">
<div class="container">
<h2>In Progress</h2>
<ul id="progress" class="sortable dropfalse">
<li id="progress_1" class="ui-state-highlight">a</li>
<li id="progress_2" class="ui-state-highlight">b</li>
<li id="progress_3" class="ui-state-highlight">c</li>
<li id="progress_4" class="ui-state-highlight">d</li>
<li id="progress_5" class="ui-state-highlight">e</li>
</ul>
</div>
</div>
<div class="column">
<div class="container">
<h2>Completed</h2>
<ul id="completed" class="sortable droptrue">
<li id="completed_1" class="ui-state-highlight">A</li>
<li id="completed_2" class="ui-state-highlight">B</li>
<li id="completed_3" class="ui-state-highlight">C</li>
</ul>
</div>
</div>
</div>
</div>
This breaks down some of the operations into smaller functions. This makes them more flexible and easier to use later. The goals I identified were:
- User moves a item in the list, or to another list
- When the list is updated, send the new order to a URL
- The Url:
"{% url '' %}"
- The Value of each is the
task_name
- The Url:
It wasn't clear what data you wanted to send, so I tried to be overly prepared. Each list now has a more precise ID, each list item also has an ID in case you want to use serialize
or toArray
methods.
When data is sent, I build a URL String. For the Pending list, this would be:
- Action: Update List
- List: Pending
- An Array of all the Pending Items: pending[]=Task Name
Your server side script will get all this data.
推荐阅读
- amazon-web-services - 带有 AWS 实例的 Google Domain 和 G-Suite
- php - 我在 PHP 中使用哈希 sha256 对我的密码进行哈希或编码。我想解码它。我不使用任何密钥或盐
- python-3.x - 在字典中查找最小值
- c# - 在 C# 中定位 XAML 控件
- angular - 当我从nodejs获取图像路径时,错误显示图像URL未在角度2的数组中定义
- zsh - optparse-applicative zsh 完成脚本期间的 compadd 失败
- z3 - Creating variables, pairs, and sets in Z3Py
- javascript - 如何在 ES6 vanilla javascript 中编写这些循环?
- jquery - OwlCarousel 2 slideBy不使用触摸和鼠标拖动
- xml - 为什么 xmllint 会给出模式解析器错误?