2012-03-21 7 views
6

Ho un elemento DOM che è trascinabile usando l'interfaccia utente di jQuery. Tutti funzionano bene ma quando creo qualche elemento utilizzando jQuery, non sono affatto trascinabili.jQuery UI draggable non funziona sull'elemento DOM appena creato

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

Grazie in anticipo !!!

Sto provando questo:

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

Tuttavia qualche modo questo sta lavorando

<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

prova a mettere avviso prima e dopo '$ ('p.draggable').trascinabile(); 'poi vedi quale sta accadendo per primo. Inoltre non sarà '$ ('body')'? –

risposta

4

è necessario chiamare trascinabili() dopo l'elemento appena creato viene inserito nel DOM.

Il motivo è che la prima riga di codice corrisponde solo agli elementi esistenti. Gli elementi appena creati non sono selezionati in quella prima riga.

+0

Grazie per il vostro impegno, ma ho provato anche quello, l'ho tenuto dentro '$ (document) .ready()' e ho anche provato a scrivere il '' alla fine del documento, ad esempio. appena prima del tag '', ma non funziona :( – Vivek

+0

Non penso che lo stai facendo correttamente.Come è un paragrafo appena creato inserito in HTML/DOM? Dopo che è stato creato, .draggable() Devo essere chiamato su quell'elemento –

+0

Ho modificato la mia domanda, per favore date un'occhiata !!! – Vivek

0

In realtà sembra che ci sia un problema con trascinamento. Quando aggiungi qualche htmlTag e poi prova a trovarlo e renderlo trascinabile, non lo riconosce. prova a creare un nuovo elemento usando createElement e poi aggiungilo. Spero che funziona

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

Grazie per ur tym e sforzo, ma ancora un tentativo senza fortuna ancora :( – Vivek

+0

Penso '$ ('p.draggable ') 'seleziona tutti gli elementi' p 'con classe' draggable 'e' draggable() 'una volta applicato a un elemento non si applica di nuovo, piuttosto il trascinabile applicato in precedenza viene anche corrotto. Prova' .draggable(). draggable() 'su qualsiasi elemento e quindi puoi vedere.Tuttavia, se applichi draggable prima di accodare se stesso e quindi append, applicherà draggable() solo a quell'elemento e anche a una volta. –

1

ho avuto questo problema, ma dopo aver letto questo ho potuto risolverlo. quindi bisogna chiamare il metodo nuovo trascinabili() dopo aver costruito il vostro nuovo elemento, questo è il mio codice:

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

So che il suo stato un po ', ma questo problema di recente mi infastidiva troppo. Come menzionato da qualcun altro, devi eseguire nuovamente .draggable() sull'elemento appena creato, ma questo non funziona se hai definito alcune opzioni nel tuo .draggable(). Inoltre, ciò che non ha funzionato è stato mettere lo $().draggable() in una funzione e quindi chiamare la funzione dopo aver creato un nuovo elemento (questo trucco funziona comunque con il ripristino dei file droppabili - vai alla figura).

In ogni caso, una lunga storia breve -> Mettendo l'installazione $().draggable() in una funzione e poi chiamando la funzione dopo aver creato il nuovo elemento DID WORK, ma ho dovuto TAKE IT OUT della funzione document ready ..... dopo aver disabilitato quello , ha funzionato.

È possibile chiamare quella funzione tante volte e continua a funzionare dopo ogni elemento creato. Sembra che sia nell'affermazione document.ready quindi un affare a 1 colpo ..

Spero che questo aiuti.

+0

" ma ciò non funziona se hai definito determinate opzioni in te r .draggable() ".... hai appena scritto la cosa excat che stavo cercando ... e se volessi definire certe opzioni in trascinamento ... come farei ?? per favore, pensa ... –

+0

"per favore, pensa ..."? ok .... hai provato a pensare? Crea una funzione, metti la definizione draggable() lì (con le opzioni) .. e poi chiama la funzione solo quando è necessario abilitare gli elementi appena creati – Matt

1

Si dovrebbe chiamare trascinabili() funzione ogni volta che si chiama un'azione 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

Si deve applicare trascinabile sul istanza dell'oggetto appena creato, codice riscritto:

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

Dovrebbe funzionare ora.

Problemi correlati