replaceWith et jQuery draggable drop?

J’essaie de comprendre pourquoi

$('#title').replaceWith('ha'); 

travaillera en dehors de la

 drop: function(event, ui) {} 

zone dans le script droppable jquery, mais cela ne fonctionnera pas à l’intérieur. Plus précisément, si je le fais

 $(".droppable").droppable({ drop: function(event, ui) { $('#title').replaceWith('ha'); } 

Je reçois une Runtime Error (line 1102) data(...).options is null or not an object . Aussi, si j’insère un $('#title').append('ha'); dans la goutte: ça marche. Cependant, si je mets $('#title').replaceWith('ha'); n’importe où ailleurs à l’extérieur

 $(".droppable").droppable({ /* */ }); 

Ça marche?

L’élément avec id = ‘title’ a-t-il aussi class = ‘droppable’

Je pouvais voir que s’il essayait de supprimer un élément qui provoquerait l’événement drop, il ne restrait peut-être plus d’élément sur lequel travailler et vous pourriez obtenir une erreur ‘not a object’. Je ne sais pas avec certitude sans essayer moi-même.

Ce que vous pouvez faire, c’est peut-être de marquer l’object avec une classe fictive (les données de jQuery conviendraient mieux et seraient conformes au SRP, mais cela n’entre pas dans le cadre de cette réponse), puis en dehors de la fonction de repository de la droppable, vous pouvez effectuer les opérations suivantes: remplacement

quelque chose comme…

 $(".droppable").droppable({ drop: function(event, ui) { // mark the element for replacement $('#title').addClass('replaceThisElement'); } }); // outside of the drop function $('#title .removeThisElement').replaceWith('ha'); 

Je poste ceci comme une réponse, mais il s’agit en réalité d’un commentaire sur la réponse de Jon Erickson (je n’ai pas encore de points de réputation à commenter). 18 mois plus tard, c’est toujours un bogue dans IE et je voulais juste préciser la partie “Comment exécuter quelque chose en dehors de la fonction de repository” en suggérant setTimeout ()

Je résous le problème en passant une fonction anonyme qui supprime l’élément à setTimeout (). En fonction de vos parameters d’accrochage ou de réversion, vous pouvez également envisager de masquer l’élément déplaçable.

 $(".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); } });