¿Cómo desactivo un jQuery arrastrable, por ejemplo, durante una devolución de datos de UpdatePanel?
¿Cómo desactivo un jQuery arrastrable, por ejemplo, durante una devolución de datos de UpdatePanel?
Respuestas:
Podría crear una función DisableDrag (myObject) y EnableDrag (myObject)
myObject.draggable( 'disable' )
Luego
myObject.draggable( 'enable' )
Para deshabilitar temporalmente el comportamiento arrastrable, use:
$('#item-id').draggable( "disable" )
Para eliminar el comportamiento arrastrable de forma permanente, utilice:
$('#item-id').draggable( "destroy" )
Para habilitar / deshabilitar arrastrable en jQuery usé:
$("#draggable").draggable({ disabled: true });
$("#draggable").draggable({ disabled: false });
La respuesta de @Calciphus no funcionó para mí con el problema de opacidad, así que usé:
div.ui-state-disabled.ui-draggable-disabled {opacity: 1;}
Trabajó en dispositivos móviles tampoco.
Aquí está el código: http://jsfiddle.net/nn5aL/1/
button()
pero eso no ayudó.
Me tomó un poco de tiempo descubrir cómo deshabilitar la función de arrastrar al soltar; utilícelo ui.draggable
para hacer referencia al objeto que se arrastra desde dentro de la función de soltar:
$("#drop-target").droppable({
drop: function(event, ui) {
ui.draggable.draggable("disable", 1); // *not* ui.draggable("disable", 1);
…
}
});
HTH alguien
Parece que nadie miró la documentación original. Puede ser que no lo hubiera en ese momento))
Inicialice un arrastrable con la opción deshabilitada especificada.
$( ".selector" ).draggable({ disabled: true });
Obtenga o configure la opción deshabilitada, después de init.
//getter
var disabled = $( ".selector" ).draggable( "option", "disabled" );
//setter
$( ".selector" ).draggable( "option", "disabled", true );
En el caso de un diálogo, tiene una propiedad llamada arrastrable, establézcalo en falso.
$("#yourDialog").dialog({
draggable: false
});
Aunque la pregunta es antigua, probé la solución propuesta y no funcionó para el diálogo. Espero que esto pueda ayudar a otros como yo.
A continuación se muestra cómo se vería esto dentro de .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
});
Tengo una solución más simple y elegante que no estropea clases, estilos, opacidades y demás.
Para el elemento que se puede arrastrar, agrega el evento 'inicio' que se ejecutará cada vez que intente mover el elemento a algún lugar. Tendrá una condición por la cual mudarse no es legal. Para los movimientos que son ilegales, evítelos con 'e.preventDefault ();' como en el código siguiente.
$(".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();
}
}
});
De nada :)