2012-03-21 12 views
6

Tengo un elemento DOM que se puede arrastrar usando jQuery UI. Todos funcionan bien, pero cuando creo algún elemento usando jQuery, no se pueden arrastrar. es decirjQuery UI que se puede arrastrar no funciona en el elemento DOM recientemente creado

$('div.draggable').draggable(); //Existing element , it works :) 
$('p.draggable').draggable() ; //Newly created paragraph with same class name, it doesnt work at all :(

Gracias de antemano !!!

estoy tratando Este:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('body').append('<p class="draggable">Newly Created Paragraph</p>'); 
     $('p.draggable').draggable(); **//This is not working** 
    }); 
</script> 

Sin embargo alguna manera esto está trabajando

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $('body').append('<p class="draggable">Newly Created Paragraph</p>') 
       .find('p.draggable').draggable(); **This is working** 

    }); 
</script> 
+0

intenta poner alerta antes y después de '$ ('p.draggable').draggable(); 'luego ver cuál está sucediendo primero. ¿No será '$ ('body')'? –

Respuesta

4

es necesario llamar a arrastrable() después de que el elemento recién creado se inserta en el DOM.

La razón es que la primera línea de código solo coincide con los elementos existentes. Los elementos recién creados no se seleccionan en esa primera línea.

+0

Gracias por su esfuerzo, pero también lo he intentado, lo guardé dentro de '$ (document) .ready()' y también intenté escribir '' al final del documento, es decir. justo antes de la etiqueta '' también, pero no funciona :( – Vivek

+0

No creo que lo esté haciendo correctamente. ¿Cómo se inserta un párrafo recién creado en el HTML/DOM? Después de crearlo, .draggable() necesita ser llamado en ese elemento. –

+0

He editado mi pregunta, por favor, eche un vistazo! – Vivek

0

En realidad parece que hay un problema con el arrastre. Cuando agrega algo de htmlTag y luego trata de encontrarlo y hacerlo arrastrable, no lo reconoce. intente hacer un nuevo elemento usando createElement y luego añádalo. Espero que funcione

var newEle = document.createElement('p'); 
$(newEle).attr("class","draggable").draggable(); 
$('body').append($(newEle)); 

o

var newEle = document.createElement('p'); 
$(newEle).attr("class","draggable"); 
$('body').append($(newEle)); 
$('p.draggable').draggable(); 
+0

Gracias por su tym y su esfuerzo, pero todavía lo intento sin suerte todavía :( – Vivek

+0

Creo '$ ('p.draggable ') 'selecciona todos los elementos' p 'con la clase' arrastrable 'y' arrastrable()' una vez aplicado a un elemento no se aplica nuevamente, en lugar de eso, el ejecutable previamente aplicado también se corrompe. Pruebe '.draggable(). draggable() 'en cualquier elemento y luego se puede ver. Sin embargo, si aplica arrastrable antes de anexarse ​​y luego anexar, se aplicará arrastrable() solo a ese elemento y también una vez. –

1

que tenía este problema, pero después de leer esto que podría resolverlo. así que hay que llamar al método nuevo arrastrable() después de la construcción de su nuevo elemento, este es mi código:

$(".in-browser").each(function(){ 
     $(this).dblclick(function(){ 
      var browseIn = $(this).data("href"); 
      var browserHTML = '<div class="browser draggable">\ 
     <ul class="browser-buttons">\ 
      <li>_ \ 
      <li># \ 
      <li>x \ 
     </ul>\ 
     <div class="browser-win-container">\ 
     <div class="addressbar"></div>\ 
     <iframe class="opening-window" src="'+browseIn+'"></iframe>\ 
    </div>\ 
    </div>'; 
      $("body").append(browserHTML); 
      $(".draggable").draggable(); //look at here 
     }); 
    }); 
9

Sé que ha pasado un tiempo, pero este problema hace poco me molestó demasiado. Como mencionó otra persona, debe volver a ejecutar .draggable() en el elemento recién creado, pero eso no funciona si definió ciertas opciones en su .draggable(). También lo que no funcionó fue poner el $().draggable() en una función y luego llamar a la función después de crear un nuevo elemento (este truco sí funciona con el restablecimiento de los elementos que se pueden eliminar: vaya figura).

De todos modos, cuento corto -> Poner la configuración $().draggable() en una función y luego llamar a la función después de crear el nuevo elemento DID WORK, pero tuve que sacarlo de la función document ready ..... después de que deshabilité ese , funcionó.

Puede llamar a esa función tantas veces y sigue trabajando después de cada elemento creado. Parece que si está en la declaración document.ready, entonces es una oferta de 1 disparo ...

Espero que ayude.

+0

" pero eso no funciona si usted definió ciertas opciones en ti r .draggable() ".... acabas de escribir la cosa de excat que estaba buscando ... ¿qué sucede si quiero definir ciertas opciones en modo de arrastrar ... cómo lo haría? por favor, piense ... –

+0

"por favor piense ..."? vale ... ¿Has intentado pensar? Cree una función, coloque la definición de draggable() allí (con opciones) .. y luego simplemente llame a la función cuando necesite habilitar elementos recién creados – Matt

1

Debe llamar arrastrable función de cada() se llama a una acción de evento:

$('body').on('click', '.add-new-table', function() { 
$(".canvas").prepend('<div class="ui-widget-content draggable"><p>Drag me</p></div>'); 
$(function(){ 
    $(".draggable").draggable({ 
    containment: "parent" 
    }); 
}); 
}); 
0

Usted tiene que solicitar que pueden arrastrarse en la instancia del objeto recién creado, código reescrito:

<script type="text/javascript"> 
$(document).ready(function(){ 
    var newElement = '<p class="draggable">Newly Created Paragraph</p>'; 
    $('body').append(newElement); 
    newElement.draggable(); **//This is working** 
}); 

Debería funcionar ahora.

Cuestiones relacionadas