Domanda

questo sembra abbastanza semplice, ma non riesco proprio a farlo funzionare. Potrei aggiungere elementi DOM, ma non riesco proprio a rimuoverli quando si usa un array.

<script language="javascript">
fields = 0;
count = 0;
function addInput() {
  if (fields != 10) {
      var htmlText =  "<input type='search' value='' name='field[]' />";
      var remButton = "<input type='button' value='del' onclick='remove()' />";
      var newElement = document.createElement('div');

      newElement.id = 'SomeID'+fields; 
      newElement.innerHTML = htmlText + remButton + newElement.id;

      var fieldsArea = document.getElementById('text');
      fieldsArea.appendChild(newElement);

      fields += 1;
  } else {
     ...
  }
count++;
}

// NEED HELP FROM HERE PLEASE
// You don't need to Loop, just get the button's id and remove that entire 'SomeID'


function remove() {
  fieldsArea = document.getElementById('text');


  fieldsArea.removeChild(SomeID1);   <-----------------------THIS WORKS!
  fieldsArea.removeChild(SomeID+count); <------------------THIS JUST WOULDN'T

  count--;
}
</script>

Nella funzione di rimozione, scrivendo SomeID1 funziona ed eliminare il primo elemento aggiunto, ma quando provo ad usare un 'count', non riesco proprio a eliminare i miei 'elementi'.

Qualsiasi aiuto sarebbe apprezzato.

Grazie!

È stato utile?

Soluzione

Dovete ottenere un riferimento al primo elemento. Attualmente si sta passando un SomeID variabile non definita alla funzione.

per esempio:.

var element = document.getElementById('SomeID' + fields);
// or starting by zero: var element = document.getElementById('SomeID0');
element.parentNode.removeChild(element);

Se si desidera rimuovere il div per il quale è stato cliccato il pulsante, si deve passare un riferimento al corrispondente div alla funzione remove.

'<input type="button" value="del" onclick="remove(this.parentNode)" />';

this farà riferimento al pulsante ed in quanto è un figlio della div, this.parentNode si riferisce a quella div.

È inoltre necessario modificare la funzione di accettare l'elemento che deve essere rimosso:

function remove(element) {
  element.parentNode.removeChild(element);   
  count--;
}

Probabilmente hanno anche all'aggiornamento fields, ma non sono sicuro di come il codice dovrebbe funzionare.


Se si desidera rimuovere tutti loro che dovete ciclo:

for(;fields--;) {
   var element = document.getElementById('SomeID' + fields);
   element.parentNode.removeChild(element);
}

hanno anche uno sguardo alla documentazione removeChild .

Altri suggerimenti

Il removeChild bisogno di un nodo (elemento DOM) come parametro. In questo caso

fieldsArea.removeChild(SomeID+count);

si potrebbe ad esempio passare il nodo in questo modo

fieldsArea.removeChild(document.getElementById('SomeID'+count));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top