jQuery UI 无需 Ajax 即可排序(使用常规格式提交订单数据)
jQuery UI Sortable without Ajax (submit order-data using regular form)
我正在使用 jQuery UI Sortable 并且我想使用常规形式提交项目顺序(因此,我希望使用 Ajax 而不是带有提交按钮的表单 - 当我提交表单时,它会将订单数据发送到服务器端)。
目前我有:
<form id="frmExample" method="post">
<ul id="sortable">
<li id="task_1" class="ui-state-default">1</li>
<li id="task_2" class="ui-state-default">2</li>
<li id="task_3" class="ui-state-default">3</li>
<li id="task_4" class="ui-state-default">4</li>
</ul>
<button id="btnSubmit" type="submit">Submit</button>
</form>
<script>
$sortable.sortable({
update: function(event, ui) {
var $data = $(this).sortable('serialize');
// now what? :)
}
});
$sortable.disableSelection();
<script>
也许这可以使用 serialize method 来完成,因为在文档中指出它“将可排序的项目 ID 序列化为 form/ajax 可提交字符串。"
......但我不知道如何。
或者也许有更好的方法(不使用 serialize
方法)?
请注意,我想将其作为数组提交。例如,提交后,在后端(PHP/Laravel 端)它看起来像:
// Result of $_POST:
// array(
// 'positions' => array('task_3', 'task_2', 'task_4', 'task_1')
// )
这是一个基本示例,它仅针对此示例片段停止提交表单。您的代码不会 e.preventDefault()
.
$(function() {
var $sortable = $("#sortable").sortable({
update: function(event, ui) {
var $data = $(this).sortable('toArray');
$("#position").val(JSON.stringify($data));
}
});
$sortable.disableSelection();
$("#position").val(JSON.stringify($sortable.sortable("toArray")));
$("#frmExample").submit(function(e) {
e.preventDefault();
console.log("Form Submit, position:", $("#position").val());
});
});
form ul {
list-style: none;
padding: 0;
width: 150px;
}
form ul li {
padding: .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>
<form id="frmExample" method="post">
<ul id="sortable">
<li id="task_1" class="ui-state-default">Item 1</li>
<li id="task_2" class="ui-state-default">Item 2</li>
<li id="task_3" class="ui-state-default">Item 3</li>
<li id="task_4" class="ui-state-default">Item 4</li>
</ul>
<input type="hidden" name="position" id="position" />
<button id="btnSubmit" type="submit">Submit</button>
</form>
我正在使用 jQuery UI Sortable 并且我想使用常规形式提交项目顺序(因此,我希望使用 Ajax 而不是带有提交按钮的表单 - 当我提交表单时,它会将订单数据发送到服务器端)。
目前我有:
<form id="frmExample" method="post">
<ul id="sortable">
<li id="task_1" class="ui-state-default">1</li>
<li id="task_2" class="ui-state-default">2</li>
<li id="task_3" class="ui-state-default">3</li>
<li id="task_4" class="ui-state-default">4</li>
</ul>
<button id="btnSubmit" type="submit">Submit</button>
</form>
<script>
$sortable.sortable({
update: function(event, ui) {
var $data = $(this).sortable('serialize');
// now what? :)
}
});
$sortable.disableSelection();
<script>
也许这可以使用 serialize method 来完成,因为在文档中指出它“将可排序的项目 ID 序列化为 form/ajax 可提交字符串。"
......但我不知道如何。
或者也许有更好的方法(不使用 serialize
方法)?
请注意,我想将其作为数组提交。例如,提交后,在后端(PHP/Laravel 端)它看起来像:
// Result of $_POST:
// array(
// 'positions' => array('task_3', 'task_2', 'task_4', 'task_1')
// )
这是一个基本示例,它仅针对此示例片段停止提交表单。您的代码不会 e.preventDefault()
.
$(function() {
var $sortable = $("#sortable").sortable({
update: function(event, ui) {
var $data = $(this).sortable('toArray');
$("#position").val(JSON.stringify($data));
}
});
$sortable.disableSelection();
$("#position").val(JSON.stringify($sortable.sortable("toArray")));
$("#frmExample").submit(function(e) {
e.preventDefault();
console.log("Form Submit, position:", $("#position").val());
});
});
form ul {
list-style: none;
padding: 0;
width: 150px;
}
form ul li {
padding: .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>
<form id="frmExample" method="post">
<ul id="sortable">
<li id="task_1" class="ui-state-default">Item 1</li>
<li id="task_2" class="ui-state-default">Item 2</li>
<li id="task_3" class="ui-state-default">Item 3</li>
<li id="task_4" class="ui-state-default">Item 4</li>
</ul>
<input type="hidden" name="position" id="position" />
<button id="btnSubmit" type="submit">Submit</button>
</form>