Как отключить перетаскивание jQuery, например, во время обратной передачи UpdatePanel?
Как отключить перетаскивание jQuery, например, во время обратной передачи UpdatePanel?
Ответы:
Можно создать функцию DisableDrag (myObject) и EnableDrag (myObject)
myObject.draggable( 'disable' )
затем
myObject.draggable( 'enable' )
Чтобы временно отключить перетаскиваемое поведение, используйте:
$('#item-id').draggable( "disable" )
Чтобы навсегда удалить перетаскиваемое поведение, используйте:
$('#item-id').draggable( "destroy" )
Чтобы включить / отключить перетаскивание в jQuery, я использовал:
$("#draggable").draggable({ disabled: true });
$("#draggable").draggable({ disabled: false });
Ответ @Calciphus не помог мне с проблемой непрозрачности, поэтому я использовал:
div.ui-state-disabled.ui-draggable-disabled {opacity: 1;}
Работал и на мобильных устройствах.
Вот код: http://jsfiddle.net/nn5aL/1/
включитьотключитьперетаскиваемыйjqueryнепрозрачностьпроблемаhtml
button()
но это не помогло.
Мне потребовалось некоторое время, чтобы выяснить, как отключить перетаскивание при отпускании - используйте ui.draggable
для ссылки на объект, который перетаскивается изнутри функции перетаскивания:
$("#drop-target").droppable({
drop: function(event, ui) {
ui.draggable.draggable("disable", 1); // *not* ui.draggable("disable", 1);
…
}
});
HTH кто-то
Похоже, никто не смотрел исходную документацию. Может, тогда и не было))
Инициализируйте перетаскиваемый объект с указанным отключенным параметром.
$( ".selector" ).draggable({ disabled: true });
Получить или установить отключенную опцию после запуска.
//getter
var disabled = $( ".selector" ).draggable( "option", "disabled" );
//setter
$( ".selector" ).draggable( "option", "disabled", true );
В случае диалогового окна у него есть свойство draggable, установите для него значение false.
$("#yourDialog").dialog({
draggable: false
});
Несмотря на то, что вопрос старый, я попробовал предложенное решение, и оно не сработало для диалога. Надеюсь, это поможет другим, как я.
Вот как это будет выглядеть внутри .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
});
У меня есть более простое и элегантное решение, которое не портит классы, стили, непрозрачность и прочее.
Для перетаскиваемого элемента вы добавляете событие 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();
}
}
});
Добро пожаловать :)