Как отключить перетаскиваемый jquery-ui?

87

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

Теги:

9 ответов

141
Лучший ответ

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

myObject.draggable( 'disable' )

Тогда

myObject.draggable( 'enable' )
  • 2
    Это работает. Полные документы для draggable () здесь . То же самое относится и к объектам sortable () (если вы разрешаете изменение порядка перетаскивания.)
  • 3
    Что значит, что документы draggable () находятся (сейчас?) Здесь со ссылкой nickb выше, переходя к демонстрации . ;)
Показать ещё 2 комментария
64

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

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

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

$('#item-id').draggable( "destroy" )
  • 6
    Я обнаружил, что «отключить» имеет побочный эффект, связанный с CSS, но уничтожить работает безупречно.
  • 2
    Возможно, вы могли бы указать и на этот побочный эффект.
Показать ещё 1 комментарий
15

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

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

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

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

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

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

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

  • 0
    Ваш JSfiddle, похоже, не работает. Кнопки не нажимаются (используется последняя версия Chrome). Я попытался обновить его до ссылок и вызова button() но это не помогло.
  • 0
    @ ashes999, у меня последний Chrome (30.0.1599.101) и до сих пор работает ...
Показать ещё 1 комментарий
11

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

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

HTH кто-то

  • 0
    Спасибо за это. Это решение хорошо работает при использовании директив draggable / droppable в AngularJS.
9

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

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

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

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

//getter
var disabled = $( ".selector" ).draggable( "option", "disabled" );
//setter
$( ".selector" ).draggable( "option", "disabled", true );
  • 0
    Это работает, но имеет побочный эффект, что делает мой div около 50% непрозрачности ... Я понятия не имею, почему.
  • 0
    @ScottBeeson Каждый раз, когда вы отключаете что-то в jQuery, он добавляет класс «ui-state-disabled». Вы можете удалить его с помощью: $ (". Ui-draggable"). RemoveClass ("ui-state-disabled")
6

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

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

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

  • 0
    Я не уверен , что вопрос конкретно связан с jQueryUI диалогов, но я нашел ваш пост полезным , тем не менее.
2

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

Для перетаскиваемого элемента вы добавляете событие "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 position
                e.preventDefault();
            }    

        }
    });

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

2

Ниже показано, как это выглядело бы внутри .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

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

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

к

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню