Frage

Ich verwende Dojo Drag-and-Drop.Wenn ein Benutzer fügt ein Element in einem container (div dojoType='dojo.dnd.- Source'), dann die ich brauche, um die Daten in eine form, so kann ich später verarbeiten, es auf einem server, wenn der Benutzer einreicht, wird die ganze Seite.Das Teil arbeitet.Dann auf ein Element zu entfernen, ich habe es Ihnen ermöglichen, ziehen Sie ein Element, um eine "trash" - container.Ich bin schwer Konzeption, wie zu entfernen Sie das Element aus der ausgeblendeten Felder.Ich habe schon abonnieren/Ereignis-code, um die folgenden zwei Funktionen.

Können Sie lassen Sie mich wissen, ob es eine bessere Weise zu tun, die removeGoalFromHiddenFields Funktion?Es kann viele "subgoal" - Elemente.

Ich bin zu Beginn des Tests mit dem, was ich unten, aber ich habe einige Zweifel.

Vielen Dank,

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]);

             }
           }

}

Auch kann ich das tun diese statt:nodes = document.getElementById("subgoal")

War es hilfreich?

Lösung

Ich vermute, was Sie wollen, hier ist die Funktionalität von dojo.query .

Versuchen Sie so etwas wie:

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

Andere Tipps

Feld.setAttribute("type","hidden");

Nicht verwenden, setAttribute, die auf HTML-Dokumente.Es gibt viele Fehler auf IE.Verwenden Sie die üblichen DOM-HTML-Eigenschaften, die auch leichter zu Lesen:

field.type= 'hidden';

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

Durchsuchen von HTML-markup für eine Wert ist dumm, und wird nicht funktionieren, wenn goalText enthält einen Charakter wie ‘<'oder '&' das HTML zu entkommen.

Für den obigen code, es sieht aus wie nodes[i] sollte eine der <input> Elemente, die Sie angehängt gibt, in welchem Fall innerHTML ist keine gute denn es wird nur nach Inhalten suchen, die den Eingang, die nichts anderes ist, als input ist ein leeres element.Betrachten Sie stattdessen, die value Eigenschaft Sie es:

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

Auch kann ich das tun diese statt:nodes = document.getElementById("subgoal")

Nein, wie Sie Ihre subgoal-Elemente haben keine IDs.Entweder durch Namen:

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

(das ist das gleiche wie DOM-0:)

var subgoals= form.elements.subgoal;

oder fügen Sie eine ID für jede subgoal zu helfen, rufen Sie es später:

field.id= 'id-'+goalText;

das obige nicht funktioniert, wieder, wenn Sie haben spezielle Charaktere in goalText.

Alternativ behalten Sie Ihre eigenen Suche in JavaScript, anstatt alles in den DOM:

var subgoalfields= {};
...
// on add
subgoalfields[goalText]= field;
...
// on remove
subgoalfields[goalText].parentNode.removeChild(subgoalfields[goalText]);
delete subgoalfields[goalText];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top