【问题标题】:Is it possible to override defined options of the jQuery-ui sortable widget?是否可以覆盖 jQuery-ui 可排序小部件的已定义选项?
【发布时间】:2015-06-07 16:45:10
【问题描述】:

我想要做什么

我是here,但问题与我最初想的不同。

我使用的 CMS 已经为可排序组设置了选项,我不想更改它们。我想要做的是将<div>"not-sortable"class 排除在可排序之外。

CMS 中包含的当前设置

    $('.meta-box-sortables').sortable({
        placeholder: 'sortable-placeholder',
        connectWith: '.meta-box-sortables',
        items: '.postbox',
        handle: '.hndle',
        cursor: 'move',
        delay: ( isMobile ? 200 : 0 ),
        distance: 2,
        tolerance: 'pointer',
        forcePlaceholderSize: true,
        helper: 'clone',
        opacity: 0.65,
    });

如上所述,我已将'postbox' 部分之一设置为附加类'not-sortable'。然后在自定义.js 文件中,我有以下内容。

我的自定义设置

jQuery(function($) {
    $(".meta-box-sortables").sortable({
        items : ':not(.not-sortable)'
    });
});

这将删除移动任何以前可拖动的部分的能力。因此,我似乎覆盖了items: 选项。

有没有一种方法可以在不覆盖原始设置的情况下做到这一点,还是我的思路错了?

【问题讨论】:

    标签: javascript jquery jquery-ui


    【解决方案1】:

    您可以使用接受对象的option 方法的形式:

    jQuery(function($) {
        $(".meta-box-sortables").sortable("option", {
            items: ":not(.not-sortable)"
        });
    });
    

    这样,您未指定的设置将被保留。

    详细说明之前存储在item 选项中的选择器,很遗憾您必须再次指定它:

    items: ".postbox:not(.not-sortable)"
    

    连接上一个值是可行的:

    items: $(".meta-box-sortables").sortable("option", "items")
        + ":not(.not-sortable)"
    

    但是,如果items 包含更复杂的选择器(例如multiple selector),它将失败:

    items: ".postbox, .other",  // Whoops.
    

    【讨论】:

    • 感谢@Frédéric Hamidi。我不认为我写的问题很好。我想保留 item: settings 已经设置但还要添加 item: not 的设置:
    • 感谢更新的答案。它证实了我在正确的轨道上。在尝试了“再次指定”和“连接”选项之后,每一个都导致没有一个字段可以拖动,并且其他功能也丢失了。我认为这个问题可能倾向于特定于 CMS,我想确保首先不是我对 jQuery 的理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    相关资源
    最近更新 更多