2010-12-14 13 views
6

Il sito utilizza l'interfaccia utente .draggable e .droppable per aggiungere l'ID del giocatore dal tag span. Questo viene aggiunto nei seguenti paragrafi:jQuery-UI - .appende da .droppable in p.array (quasi lì!)

  <p class="array goals"></p> 
      <p class="array assist"></p> 
      <p class="array yellow"></p> 
      <p class="array red"></p> 
      <p class="array cap"></p> 

Da questi div

  <h2>DROP PLAYERS INTO AREAS BELOW</h2> 
      <p>Goals</p> 
      <div class="droppable goals"><p></p></div> 
      <p>Assists</p> 
      <div class="droppable assist"><p></p></div> 
      <p>Yellow card</p> 
      <div class="droppable yellow"><p></p></div> 
      <p>Red card</p> 
      <div class="droppable red"><p></p></div> 
      <p>Captain</p> 
      <div class="droppable cap"><p></p></div> 

Con questo javascript (ridurre al codice necessario)

<script type="text/javascript"> 
$(function() { 
    $(".droppable").droppable({ 
     activeClass: 'dragactive', 
     hoverClass: 'drophover', 
     drop: function(event, ui) { 
      $(".array").append(ui.draggable.children("span").text() + ', ') 
     } 
    }); 

}); 
</script> 

ho bisogno del caduto elementi per entrare nel giusto p.array basato sulla seconda classe. Ora, il risultato di .droppable viene aggiunto ad OGNI classe di array.

Questo è un esempio di mark-up del lettore trascinabile:

<div class="drakt spiller draggable"> 
    <span style="visibility: hidden;">58</span> 
    <div class="draktnummer">17</div><p>Traoré</p> 
</div> 

Spero che mi può aiutare con questo.

Grazie in anticipo.

risposta

2

Qualcosa di simile potrebbe funzionare:

drop: function(event, ui) { 
    // clz might need trimming 
    var clz = $(this)[0].className.replace("droppable", ""); 
    $(".array." + clz).append(ui.draggable.children("span").text()) 
} 

Un'altra idea è quella di utilizzare gli attributi di dati. Se è possibile modificare il PHP per la produzione di HTML che assomiglia a questo:

<div class="droppable goals" data-droptype="goals"><p></p></div> 

... questa imposta una proprietà sul div accessibile tramite il metodo di jQuery .data. Così la funzione di cui sopra diventa allora:

drop: function(event, ui) { 
    $(".array." + $(this).data('droptype')).append(ui.draggable.children("span").text()) 
} 
+0

ho appena iniziato a provare jQuery ieri. Il tuo codice non fa ancora il trucco. È possibile farlo come una dichiarazione IF/ELSE con PHP? Per prima cosa, trova la classe della scatola, quindi aggiungila alla classe .array che corrisponde? Mi dispiace davvero, ma non ho la conoscenza di jQuery per cercare errori nel codice. :) –

+0

@Antonio - guarda la mia modifica. – sje397

2

non sono veramente sicuro che cosa significa questo codice ...

$(this).find('p') 
      $(".array").append(ui.draggable.children("span").text()) 

Provare a cambiare a questo:

$(this).find('p.array').append(ui.draggable.children("span").text()) 

EDIT: mi sembra di vedere quello di cui hai bisogno ora. Non ho letto così attentamente prima. Quello di cui hai bisogno è di aggiungere il testo da s nel trascinabile ai paragrafi nel primo blocco di codice dopo che sono stati rilasciati nelle loro corrispondenti div nel secondo blocco, giusto?

In tal caso, è possibile aggiungere il proprio attributo ai file trascinabili, ad esempio "myattr". Se questa è la vostra trascinabili:

<div id="mydrag" myattr="goals" class="draggable"><span>text to append</span></div> 

e questo è il codice per la droppable

drop: function(event, ui) { 
    var myattrVal = ui.draggable.attr('myattr'); 
    //Finds the p with the class goals from if the div above was the draggable 
    $('p.' + myattrVal).append(ui.draggable.find('span').text() + ','); 
} 
+0

Grazie per la risposta, Hersheezy. Ho scoperto che potevo saltare l'intero "$ (this) .find" del codice. Primo post aggiornato. –

+0

in realtà mi piace la soluzione di sje397 meglio.l'utilizzo della funzione dati è molto più pulito. – Hersheezy

+0

La tua risposta è molto apprezzata. La mia logica è che non funzionerà. I draggables potrebbero essere aggiunti a qualsiasi campo. Forse la logica potrebbe essere usata nei droppabili? sje397 sta facendo qualcosa del genere. - Più probabile che funzionerà secondo me. Sicuramente giocherò un po 'con il tuo codice per vedere se questo è quello che sto cercando. Puoi vedere il markup di tutti i draggables nel mio primo post. I numeri di maglia e ID giocatore vengono ripresi dalla query. –