【发布时间】:2018-10-08 09:55:38
【问题描述】:
我有一个包含类别和问题的列表(都可以动态添加),目前我可以使用 jQuery 可排序的类别对类别进行排序,但不能对类别下的问题进行排序。
我尝试在问题包装元素上添加另一个 .sortable 函数,但它根本没有响应。
我现在的代码:
// HTML template for new fields
const template = `
<div class="row sortwrap">
<div class="col-md-8">
<input type="text" name="category[]" placeholder="" class="form-control name_list catinput" />
<i class="mdi mdi-sort dragndrop"></i>
<div class="questionlist questionwrap">
<div class="row">
<div class="col-md-8">
<button class="btn btn-success questionbutton">Extra vraag</button>
<input type="text" name="question[]" placeholder="1. Voeg een vraag toe" class="form-control name_list questioninput" />
</div>
<div class="col-md-4">
</div>
</div>
</div>
</div>
<div class="col-md-4">
<button id="addcategory" class="btn btn-danger btn_remove removebutton">X</button>
</div>
</div>`;
const vraagTemplate = `
<div class="row" id="question">
<div class="col-md-8">
<input type="text" name="question[]" class="form-control name_list questioninput" />
</div>
<div class="col-md-4">
<button class="btn btn-danger btn_remove">X</button>
</div>
</div>`;
// Count numbers and change accordingly when field is deleted
function updatePlaceholders() {
// Sortable code
// $('#dynamic_field').sortable( "refresh" );
let df = $('#dynamic_field');
df.find('input[name^=cat]').each(function(i) {
$(this).attr("placeholder", i + 1 + ". Voeg een categorie toe");
});
df.find('.sortwrap').each(function(i) {
$(this).attr("id", i + 1);
});
df.find('.questionlist').each(function() {
$(this).find('input[name^=qu]').each(function(i) {
$(this).attr("placeholder", i + 1 + ". Voeg een vraag toe");
});
});
}
// Append question template
$('#dynamic_field').on('click', '.questionbutton', function() {
let $ql = $(this).closest('.questionlist');
$ql.append($(vraagTemplate));
updatePlaceholders();
});
// Delete
$('#dynamic_field').on('click', '.btn_remove', function() {
$(this).closest('.row').remove();
updatePlaceholders();
});
$('#addcategory').on('click', function() {
let t = $(template)
$('#dynamic_field').append(t);
updatePlaceholders();
});
$(function() {
$('#addcategory').trigger('click');
$('#question').sortable();
$('#dynamic_field').sortable({
cancel: '.questionwrap',
placeholder: "ui-state-highlight"
});
});
这是我的可排序代码:
$(function() {
$('#addcategory').trigger('click');
$('#question').sortable();
$('#dynamic_field').sortable({
cancel: '.questionwrap',
placeholder: "ui-state-highlight"
});
#question 是我的问题列表的包装,#dynamic_field 是我的类别元素的包装(问题也在此元素内)。
如何使我的问题也可排序?并且只能在其父 div 中进行排序(因此我不能将问题从一个类别拖到另一个类别,而只能在其自己的类别中)。
【问题讨论】:
-
请记住,当页面准备好时,Sortable 正在初始化。看起来您正在动态添加元素。当您将元素添加到任一列表时,您将需要
refresh。然后,您还需要为每个列表集正确使用items,并可能使用handle。如果您需要进一步的帮助,请提供一个最小、完整且可验证的示例:stackoverflow.com/help/mcve
标签: javascript jquery jquery-ui jquery-ui-sortable