【问题标题】:Uncaught Error: cannot call methods on draggable prior to initialization; attempted to call method 'disable'未捕获的错误:在初始化之前无法调用可拖动的方法;试图调用方法“禁用”
【发布时间】:2017-10-25 02:31:01
【问题描述】:

https://jsfiddle.net/scottbeeson/r5du4p6k/12/

如果你长按拖动,当你释放你会得到以下错误:

未捕获的错误:在初始化之前无法调用可拖动的方法;试图调用方法“禁用”

var t;
$(document).on('touchstart mousedown','.menu-item', function (event) {
    var self = this;
    if ($(self).hasClass('draggable')) return;
    t = setTimeout(function () {
        $(self).draggable({
            revert: true,
            helper: 'clone',
            opacity: .75,
            appendTo: 'body'
        }).draggable('enable').addClass('draggable');
        $(self).trigger(event)
    }, 800);
});

$(document).on("touchend mouseup", function () {
    clearTimeout(t);
    $('.draggable').draggable( 'disable' ).removeClass('draggable');
});

【问题讨论】:

    标签: jquery jquery-ui jquery-mobile


    【解决方案1】:

    由于您复制了原始元素,因此当您尝试删除 draggable 时 - 您也对刚刚复制的元素执行此操作(不可拖动),因此您不能 disable 它。

    你可以做的是只在第一个元素上禁用它:

    $('.draggable').first().draggable( 'disable' ).removeClass('draggable');
    

    检查这个:
    https://jsfiddle.net/r5du4p6k/13/

    【讨论】:

    • 哦,可拖动事件的克隆?说得通。谢谢。
    • 我没有使用.first(),而是使用$('#container .draggable')... 限制了范围。这似乎更可靠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多