Come disabilito un jQuery trascinabile, ad esempio durante un postback UpdatePanel?
Come disabilito un jQuery trascinabile, ad esempio durante un postback UpdatePanel?
Risposte:
Potrebbe creare una funzione DisableDrag (myObject) e EnableDrag (myObject)
myObject.draggable( 'disable' )
Poi
myObject.draggable( 'enable' )
Per disabilitare temporaneamente il comportamento trascinabile, utilizzare:
$('#item-id').draggable( "disable" )
Per rimuovere permanentemente il comportamento trascinabile, usa:
$('#item-id').draggable( "destroy" )
Per abilitare / disabilitare il trascinabile in jQuery ho usato:
$("#draggable").draggable({ disabled: true });
$("#draggable").draggable({ disabled: false });
La risposta di @Calciphus non ha funzionato per me con il problema di opacità, quindi ho usato:
div.ui-state-disabled.ui-draggable-disabled {opacity: 1;}
Ha funzionato anche su dispositivi mobili.
Ecco il codice: http://jsfiddle.net/nn5aL/1/
button()
ma non è stato d'aiuto.
Mi ci è voluto un po 'di tempo per capire come disabilitare il trascinamento al rilascio, utilizzare ui.draggable
per fare riferimento all'oggetto trascinato dall'interno della funzione di rilascio:
$("#drop-target").droppable({
drop: function(event, ui) {
ui.draggable.draggable("disable", 1); // *not* ui.draggable("disable", 1);
…
}
});
HTH qualcuno
Sembra che nessuno abbia guardato la documentazione originale. Forse non c'era in quel momento))
Inizializza un trascinabile con l'opzione disabilitata specificata.
$( ".selector" ).draggable({ disabled: true });
Ottieni o imposta l'opzione disabilitata, dopo init.
//getter
var disabled = $( ".selector" ).draggable( "option", "disabled" );
//setter
$( ".selector" ).draggable( "option", "disabled", true );
Nel caso di una finestra di dialogo, ha una proprietà chiamata trascinabile, impostala su false.
$("#yourDialog").dialog({
draggable: false
});
Anche se la domanda è vecchia, ho provato la soluzione proposta e non ha funzionato per la finestra di dialogo. Spero che questo possa aiutare altri come me.
Quanto segue è come apparirebbe all'interno di .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
});
Ho una soluzione più semplice ed elegante che non crea confusione con classi, stili, opacità e cose del genere.
Per l'elemento trascinabile - aggiungi l'evento "start" che verrà eseguito ogni volta che proverai a spostare l'elemento da qualche parte. Avrai una condizione che la mossa non è legale. Per le mosse illegali, prevenile con 'e.preventDefault ();' come nel codice qui sotto.
$(".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();
}
}
});
Prego :)