ReplaceWith e jQuery goccia trascinabili?
-
12-09-2019 - |
Domanda
Sto cercando di capire perché
$('#title').replaceWith('ha');
sarà lavorare fuori
drop: function(event, ui) {}
Area nello script droppable di jQuery, ma non funzionerà all'interno. In particolare, se faccio
$(".droppable").droppable({
drop: function(event, ui) {
$('#title').replaceWith('ha');
}
ho un Runtime Error (line 1102) data(...).options is null or not an object
. Anche se inserisco un $('#title').append('ha');
all'interno della goccia :, funziona.
Tuttavia, se ho messo $('#title').replaceWith('ha');
altrove al di fuori
$(".droppable").droppable({ /* */ });
funziona?
Soluzione
fa l'elemento con id = 'title' anche avere class = 'droppable'
ho potuto vedere se si sta cercando di rimuovere un elemento che avrebbe causato l'evento di rilascio si verifichi non ci può essere altro elemento con cui lavorare e si potrebbe ottenere un 'non un oggetto' errore. Non lo so per certo, senza cercare questo fuori me stesso.
Forse quello che si può fare è segnare l'oggetto con una certa classe fittizio (i dati di jQuery sarebbe più adatto e rispettare la SRP, ma che è fuori della portata di questa risposta), e quindi al di fuori della funzione di goccia del droppable voi può fare la sostituzione
qualcosa di simile ...
$(".droppable").droppable({
drop: function(event, ui) {
// mark the element for replacement
$('#title').addClass('replaceThisElement');
}
});
// outside of the drop function
$('#title .removeThisElement').replaceWith('ha');
Altri suggerimenti
Sto postando questo come una risposta, ma in realtà la sua più di un commento sulla risposta di Jon Erickson (non ho i punti reputazione di commentare ancora). 18 mesi dopo, questo è ancora un bug in IE e volevo solo elaborare il 'come eseguire qualcosa al di fuori della goccia funzione di' parte suggerendo setTimeout ()
sto risolvendo il problema passando una funzione anonima che rimuove l'elemento a setTimeout (). A seconda delle impostazioni di snap o reversione si potrebbe prendere in considerazione anche nascondere il trascinabile.
$(".droppable").droppable({
drop: function(event, ui) {
// do something interesting here...
// now get rid of the draggable
$(ui.draggable).hide();
setTimeout(function(){$(ui.draggable).remove();}, 1);
}
});