2009-08-28 6 views

Répondre

2

La solution est de ne pas utiliser jQuery pour déplacer les éléments, mais d'utiliser le DOM pur.

C'est, au lieu de

$('#elem').remove().appendTo($('#elem2')) 

do

var q = $('#elem'); var el = q.get(0); el.parentNode.removeChild(el); $('#elem2').appendChild(el); 

Je ne sais pas s'il est recommandé, mais il fonctionne.

+0

Je sais que c'est une vieille réponse mais si cela ne vous dérange pas, j'aimerais savoir pourquoi l'utilisation du DOM pur résoudre le problème? par la façon dont vous avez sauvé ma journée merci beaucoup :) – medBo

0

pourquoi ne pas vous essayez de créer le comportement draggable à nouveau une fois que vous déplacez dans le DOM:

function xyz(){ 
    //move your stuff 
    //create the draggable again 

    $(element).draggable(); 
} 
+0

Parce que à cause de comment mon architecture est, je ne peux pas – erikkallen

0

Non, il est impossible de préserver draggability lorsque vous remplacez/supprimer des éléments dans les DOM, à moins que vous modifier le noyau jquery (que je ne recommande pas.)

Si vous faites replaceWith() et remove() pour les éléments DOM, cela signifie qu'ils sont détruits et que tous les comportements ou événements qui leur sont associés sont également détruits.

Essayez de créer un <div> externe qui contient le comportement draggable et au lieu de remplacer le code HTML dans le div lorsque vous voulez changer l'élément draggable à goutte, etc.

Alternativement (et moins élégant), vous pouvez appeler à nouveau draggable() sur vos éléments après votre faire replaceWith() pour restaurer le comportement que vous avez supprimé avec replaceWith().

De même, au lieu de remove(), essayez hide() de faire simplement disparaître les éléments pendant un certain temps tout en conservant leur comportement.

En bref: Vous abordez le problème de manière incorrecte. Changez votre approche.

Questions connexes