jquery - 如何在ui-sortable中手动触发 'update'

标签 jquery jquery-ui jquery-ui-sortable

我正在使用可排序的 UI,每个项目中都有一个删除按钮。这是删除功能:

$('.delete_item').click(function(){
    $(this).closest('.grid_3_b').remove();
    initSortable();
    $(".sortable").sortable('refresh').trigger('update');
});

div 已按照我的意愿删除,但是没有 update 数据发送到 PHP。所以我的脚本不会保存订单和已删除的项目。 .

这是我的 initSortable(); 函数:

function initSortable() {
    $( ".sortable" ).sortable({
        items: '.grid_3_b, .dropable',
        connectWith: ".sortable",
        placeholder: "placeholder",
        remove: function(event, ui) {
            if(!$('div', this).length) {
                $(this).next('.dropable').remove();
                $(this).remove();
            }
            initMenu();
        },
        receive: function(event, ui) {
            if( $(this).hasClass( "dropable" ) ) {
                if( $(this).hasClass( "gallery__item--active" ) ) {
                    $(this).before( "<div class=\"dropable gallery__item sortable\"></div>" );
                    $(this).after( "<div class=\"dropable gallery__item sortable\"></div>" );

                    initSortable();
                    $(".sortable").sortable('refresh').trigger('update');
                    initMenu();
                }
            }
        },
        update : function () {
            var neworder = new Array();
            $('.sortable').each(function() {
                var id  = $(this).attr("id");
                var pusharray = new Array();
                $('#' + id).children('div').each(function () {
                    var art = $(this).attr("data-art");
                    var pos = $(this).attr("data-pos");
                    pusharray.push( {data:{'art':art, 'pos':pos}} );
                });
                neworder.push({'id':id, 'articles':pusharray});
            });

            $.post("example.php",{'neworder': neworder},function(data){});
            initMenu();
        }
    }).disableSelection();
}

initSortable();

此外,remove 函数通常会在列为空时删除该列,但在删除该列中的最新项目时不起作用。这是因为未调用更新触发器吗?

最佳答案

用于手动触发 jquery-ui sortable 中的事件,您不需要在选项对象中指定处理程序,而是需要在可排序初始化后绑定(bind)事件处理程序。

例如以下内容将不起作用

$('ul').sortable({
  update: function () {
    console.log('update called');
  }
});
$('ul').trigger('sortupdate'); // doesn't work

以下作品

$('ul').sortable();
$('ul').on('sortupdate',function(){
   console.log('update called');
});
$('ul').trigger('sortupdate'); // logs update called.

Demo

关于jquery - 如何在ui-sortable中手动触发 'update',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23057755/

相关文章:

javascript - 如何使用jspdf自动分页

javascript - JQuery,在使用 promise 之前删除一行

jQuery UI Slider 检测 slider 处理拖放事件

jquery datepicker - 覆盖数据属性中的选项

javascript - swarminject 是做什么用的?

jquery - 将 LI 从 UL A 拖到 UL B 并从 UL A 中删除?

javascript - 如何在页面加载时突出显示 JQuery 表的第一行?

jquery - 如何防止 Drupal 关注触发 ajax 提交的元素?

javascript - 如何计算可排序 div 中的元素数量?

javascript - AngularJS ng-repeat 重新渲染