Как отключить перетаскиваемый jquery-ui? - PullRequest
94 голосов
/ 24 августа 2009

Как отключить перетаскивание jQuery, например во время обратной передачи UpdatePanel?

Ответы [ 9 ]

144 голосов
/ 24 августа 2009

Может создать функции DisableDrag (myObject) и EnableDrag (myObject)

myObject.draggable( 'disable' )

Тогда

myObject.draggable( 'enable' )
64 голосов
/ 03 сентября 2010

Чтобы временно отключить перетаскиваемое поведение, используйте:

$('#item-id').draggable( "disable" )

Чтобы удалить перетаскиваемое поведение навсегда, используйте:

$('#item-id').draggable( "destroy" )
18 голосов
/ 14 сентября 2013

Чтобы включить / отключить перетаскивание в jQuery, я использовал:

$("#draggable").draggable({ disabled: true });          

$("#draggable").draggable({ disabled: false });

@ Ответ Calciphus не помог мне с проблемой непрозрачности, поэтому я использовал:

div.ui-state-disabled.ui-draggable-disabled {opacity: 1;}

Работал и на мобильных устройствах.

Вот код: http://jsfiddle.net/nn5aL/1/

11 голосов
/ 28 декабря 2009

Мне потребовалось немного времени, чтобы выяснить, как отключить перетаскивание при перетаскивании - используйте ui.draggable для ссылки на объект, перетаскиваемый изнутри функции отбрасывания:

$("#drop-target").droppable({
    drop: function(event, ui) {
        ui.draggable.draggable("disable", 1); // *not* ui.draggable("disable", 1);
        …
    }
});

HTH кто-то

9 голосов
/ 17 октября 2011

Похоже, никто не смотрел на оригинальную документацию. Может быть, тогда этого не было))

Инициализировать перетаскиваемый объект с указанной отключенной опцией.

$( ".selector" ).draggable({ disabled: true });

Получить или установить отключенную опцию после инициализации.

//getter
var disabled = $( ".selector" ).draggable( "option", "disabled" );
//setter
$( ".selector" ).draggable( "option", "disabled", true );
7 голосов
/ 09 июля 2013

В случае диалога, у него есть свойство с именем draggable, установите его в false.

$("#yourDialog").dialog({
    draggable: false
});

Несмотря на то, что вопрос старый, я попробовал предлагаемое решение, и оно не сработало для диалога. Надеюсь, что это может помочь другим, как я.

3 голосов
/ 31 октября 2017

У меня есть более простое и элегантное решение, которое не портит классы, стили, непрозрачность и прочее.

Для перетаскиваемого элемента - вы добавляете событие start, которое будет выполняться каждый раз, когда вы пытаетесь переместить элемент куда-нибудь. У вас будет условие, которое не разрешено. Для ходов, которые являются недопустимыми - предотвратите их с помощью e.preventDefault (); как в коде ниже.

    $(".disc").draggable({
        revert: "invalid", 
        cursor: "move",
        start: function(e, ui){                
            console.log("element is moving");

            if(SOME_CONDITION_FOR_ILLEGAL_MOVE){
                console.log("illegal move");
                //This will prevent moving the element from it's position
                e.preventDefault();
            }    

        }
    });

Добро пожаловать:)

3 голосов
/ 11 ноября 2014

Вот как это будет выглядеть внутри .draggable({});

$("#yourDraggable").draggable({
    revert: "invalid" ,
    start: function(){ 
        $(this).css("opacity",0.3);
    },
    stop: function(){ 
        $(this).draggable( 'disable' )
    },
    opacity: 0.7,
    helper: function () { 
        $copy = $(this).clone(); 
        $copy.css({
            "list-style":"none",
            "width":$(this).outerWidth()
        }); 
        return $copy; 
    },
    appendTo: 'body',
    scroll: false
});
0 голосов
/ 05 июля 2017

Изменить атрибут draggable с

<span draggable="true">Label</span>

до

<span draggable="false">Label</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...