Como eu desativo um jQuery arrastável, por exemplo, durante um postback do UpdatePanel?
Como eu desativo um jQuery arrastável, por exemplo, durante um postback do UpdatePanel?
Respostas:
Poderia criar uma função DisableDrag (myObject) e EnableDrag (myObject)
myObject.draggable( 'disable' )
Então
myObject.draggable( 'enable' )
Para desativar temporariamente o comportamento arrastável, use:
$('#item-id').draggable( "disable" )
Para remover o comportamento arrastável permanentemente, use:
$('#item-id').draggable( "destroy" )
Para habilitar / desabilitar draggable em jQuery eu usei:
$("#draggable").draggable({ disabled: true });
$("#draggable").draggable({ disabled: false });
A resposta da @Calciphus não funcionou para mim com o problema de opacidade, então usei:
div.ui-state-disabled.ui-draggable-disabled {opacity: 1;}
Funcionou em dispositivos móveis também.
Aqui está o código: http://jsfiddle.net/nn5aL/1/
button()
mas não adiantou.
Levei um pouco de tempo para descobrir como desabilitar arrastável ao soltar - use ui.draggable
para fazer referência ao objeto sendo arrastado de dentro da função de soltar:
$("#drop-target").droppable({
drop: function(event, ui) {
ui.draggable.draggable("disable", 1); // *not* ui.draggable("disable", 1);
…
}
});
HTH alguém
Parece que ninguém olhou a documentação original. Pode ser que não houvesse naquela época))
Inicializa um arrastável com a opção desativada especificada.
$( ".selector" ).draggable({ disabled: true });
Obtenha ou defina a opção disabled, após o init.
//getter
var disabled = $( ".selector" ).draggable( "option", "disabled" );
//setter
$( ".selector" ).draggable( "option", "disabled", true );
No caso de uma caixa de diálogo, ela tem uma propriedade chamada draggable, defina-a como false.
$("#yourDialog").dialog({
draggable: false
});
Embora a pergunta seja antiga, tentei a solução proposta e não funcionou para o diálogo. Espero que isso possa ajudar outras pessoas como eu.
A seguir está como isso ficaria 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
});
Tenho uma solução mais simples e elegante que não atrapalha classes, estilos, opacidades e outras coisas.
Para o elemento arrastável - você adiciona o evento 'start' que será executado toda vez que você tentar mover o elemento para algum lugar. Você terá uma condição em que o movimento não é legal. Para os movimentos ilegais - evite-os com 'e.preventDefault ();' como no código abaixo.
$(".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();
}
}
});
Você é bem vindo :)