Domanda

Sto usando Dojo Drag and Drop. Quando un utente aggiunge un elemento a un contenitore (div dojoType = 'dojo.dnd.Source') poi ho bisogno di ottenere che i dati in una forma così posso poi lavorare su un server quando l'utente invia l'intera pagina. Quella parte sta funzionando. Poi, per rimuovere un elemento, permetto loro di drag / drop un elemento a un contenitore di "trash". Sto avendo difficoltà concettualizzazione come rimuovere la voce dai campi nascosti. Ho già sottoscrivere / codice di evento per richiamare le seguenti due funzioni.

Si può farmi sapere se c'è modo migliore per farlo la funzione removeGoalFromHiddenFields? Ci possono essere molti elementi "secondi fini".

Sono in procinto di iniziare i test con quello che ho qui di seguito, ma ho qualche dubbio su di esso.

Grazie,

Neal Walters

   function addGoalToHiddenFields( goalText){
      var field = document.createElement("input");
      field.setAttribute("type","hidden");
      field.setAttribute("value",goalText);
      field.setAttribute("name","subgoal");

      //add new hidden-element to the existing form
      document.getElementById("form1").appendChild(field);
   }

   function removeGoalFromHiddenFields( goalText){

      //remove hidden field 
      nodes = document.getElementById("form1")
      for (i=0;i<nodes.length ;i++ )
           {
             var pos = nodes[i].innerHTML.IndexOf(goalText)
             if (pos > 0)
             {
                 nodes.removeChild(node[i]);

             }
           }

}

Inoltre, posso fare questo, invece:           nodi = document.getElementById ( "secondi fini")

È stato utile?

Soluzione

sto cercando di indovinare ciò che si vuole qui è la funzionalità di dojo.query .

Prova qualcosa di simile:

dojo.query("#form1 input[value=\"" + goalText + "\"]").forEach(function(field) {
    field.parentNode.removeChild(field)
});

Altri suggerimenti

  

field.setAttribute ( "tipo", "nascosto");

Non utilizzare setAttribute nei documenti HTML. Ci sono molti bug in esso su IE. Utilizzare le normali proprietà DOM-HTML, che sono anche più facili da leggere:

field.type= 'hidden';
  

var pos = nodo [i] .innerHTML.IndexOf (goalText)

La ricerca attraverso il markup HTML per un valore non è stupido, e non funzionerà quando goalText contiene un personaggio come ‘<’ o ‘e’ che HTML sfuggirà.

Per il codice di cui sopra, sembra che nodes[i] dovrebbe essere uno degli elementi <input> si allegati lì, nel qual caso innerHTML è non va bene in quanto cercherà solo il contenuto del input, che è nulla in ingresso è un elemento vuoto . Invece, guarda la proprietà value si mette lì:

var input= nodes[i];
if (input.name=='subgoal' && input.value==goalText)
    input.parentNode.removeChild(input);
  

Inoltre, posso fare questo, invece: i nodi = document.getElementById ( "secondi fini")

No, come gli elementi non hanno secondi fini ID. O ottenere per nome:

var subgoals= form.getElementsByName('subgoal');

(che è lo stesso come DOM-0:)

var subgoals= form.elements.subgoal;

o, aggiungere un ID a ciascun sotto-obiettivo per aiutare a recuperare in un secondo momento:

field.id= 'id-'+goalText;

È possibile che questo non funziona, ancora una volta, se si può avere caratteri speciali in goalText.

In alternativa, mantenere il vostro proprio di ricerca in JavaScript invece di mettere tutto nel DOM:

var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top