jQuery UI Sortable Widget 动态添加的列表不触发事件
jQuery UI Sortable Widget dynamically added lists not triggering events
我有两个可排序列表,其中一个包含一组项目。用户应该能够在这些列表之间进行排序。
他们还应该能够创建新列表,他们还可以添加初始项目。所以可排序元素是静态的,但可排序列表是动态的。
前两个列表的可排序事件被触发并且工作正常。但是,问题在于动态添加的列表。添加它们没有问题,您可以将项目分类到其中。问题是事件的 none 被触发,例如 'receive' 或 'activate',所以当我将一个元素拖到其中一个新列表时,我想获取列表的 id ,但它永远不会触发任何这些事件。
这是一个简单的 fiddle
JS Fiddle
$(".connectedSortable").sortable({
connectWith: '.connectedSortable',
receive: function(event, ui) {
var receivingID = ui.item.parent('ul').attr('id');
console.log('receiving id :' + receivingID);
}}).disableSelection();
在动态添加的列表中运行这似乎从来没有
function makeSortable(id) {
console.log(id);
$("#" + id).sortable({
connectWith: ".connectedSortable"
,
activate: function(event, ui) {
console.log("activated list" + id);
}}
).disableSelection(); }
这就是用户添加另一个列表时 运行 的内容。
这是对您的 JS Fiddle 的更新,问题已解决。 LINK!
$(".connectedSortable").sortable(...)
块需要在 $('#add_new_list').click(...)
函数的末尾 运行。 .sortable(...)
代码将 sortable 添加到所有现有项目,但不包括未来项目。
我所做的更改将 .sortable(...)
包装在一个名为 refreshHooks()
的函数中,该函数在页面加载时 运行 并且每次单击 "Add New List" 时都会再次出现。
$(document).ready(function () {
function makeSortable(id) {
console.log(id);
$("#" + id).sortable({
connectWith: ".connectedSortable",
activate: function (event, ui) {
console.log("activated list" + id);
}}
).disableSelection();
}
var list_counter = 2;
$('#add_new_list').click(function () {
$('#add_new_list').before($(
'<ul id="list' + list_counter + '"' +
' class="connectedSortable"></ul>'
));
var lists = {};
lists.list_id = ['list' + list_counter];
makeSortable(lists.list_id);
list_counter++;
refreshHooks();
});
function refreshHooks() {
$(".connectedSortable").sortable({
connectWith: '.connectedSortable',
receive: function (event, ui) {
var receivingID = ui.item.parent('ul').attr('id');
console.log(receivingID);
},
activate: function (event, ui) {
console.log("activated list");
}
}).disableSelection();
}
refreshHooks();
});
我有两个可排序列表,其中一个包含一组项目。用户应该能够在这些列表之间进行排序。 他们还应该能够创建新列表,他们还可以添加初始项目。所以可排序元素是静态的,但可排序列表是动态的。
前两个列表的可排序事件被触发并且工作正常。但是,问题在于动态添加的列表。添加它们没有问题,您可以将项目分类到其中。问题是事件的 none 被触发,例如 'receive' 或 'activate',所以当我将一个元素拖到其中一个新列表时,我想获取列表的 id ,但它永远不会触发任何这些事件。
这是一个简单的 fiddle JS Fiddle
$(".connectedSortable").sortable({
connectWith: '.connectedSortable',
receive: function(event, ui) {
var receivingID = ui.item.parent('ul').attr('id');
console.log('receiving id :' + receivingID);
}}).disableSelection();
在动态添加的列表中运行这似乎从来没有
function makeSortable(id) {
console.log(id);
$("#" + id).sortable({
connectWith: ".connectedSortable"
,
activate: function(event, ui) {
console.log("activated list" + id);
}}
).disableSelection(); }
这就是用户添加另一个列表时 运行 的内容。
这是对您的 JS Fiddle 的更新,问题已解决。 LINK!
$(".connectedSortable").sortable(...)
块需要在 $('#add_new_list').click(...)
函数的末尾 运行。 .sortable(...)
代码将 sortable 添加到所有现有项目,但不包括未来项目。
我所做的更改将 .sortable(...)
包装在一个名为 refreshHooks()
的函数中,该函数在页面加载时 运行 并且每次单击 "Add New List" 时都会再次出现。
$(document).ready(function () {
function makeSortable(id) {
console.log(id);
$("#" + id).sortable({
connectWith: ".connectedSortable",
activate: function (event, ui) {
console.log("activated list" + id);
}}
).disableSelection();
}
var list_counter = 2;
$('#add_new_list').click(function () {
$('#add_new_list').before($(
'<ul id="list' + list_counter + '"' +
' class="connectedSortable"></ul>'
));
var lists = {};
lists.list_id = ['list' + list_counter];
makeSortable(lists.list_id);
list_counter++;
refreshHooks();
});
function refreshHooks() {
$(".connectedSortable").sortable({
connectWith: '.connectedSortable',
receive: function (event, ui) {
var receivingID = ui.item.parent('ul').attr('id');
console.log(receivingID);
},
activate: function (event, ui) {
console.log("activated list");
}
}).disableSelection();
}
refreshHooks();
});