Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Errore JS rilevato da console firefox (removeChild) per� lo script funziona.

    Salve a tutti , ho creato uno script il cui uno dei suoi scopi � rimuovere determinati elementi dalla DOM utiliazzando la classe assegnata come selettore comune, lo script funziona a dovere ma una volta che ho utilizzo gli strumenti di analisi di firefox e faccio "partire" la funzione nella console appare il seguente messaggio.
    TypeError: Argument 1 of Node.removeChild is not an object.
    Ho provato a cercare altri casi in cui si verifica questo errore ma non sono riuscito a risolvere il problema.

    La funzione che mi fa restituire l'errore � la seguente:

    function delAll(){
    var cartCont = document.getElementById("pdt_cart");
    var i ;
    var contDel=document.getElementsByClassName("cnt");
    for (i = 0; i < contDel.length; i++){
    var x=i;
    while (x>=0) {
    var delPdt= cartCont.removeChild(contDel[x]);

    document.getElementById("tot").innerHTML=0;
    document.getElementById("totQnt").innerHTML=0;
    }
    }
    }

    Come gia dicevo nel titolo lo script fa il suo dovere per� vorrei che non ci fossero errori.
    Qualcuno mi pu� dare una mano?

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Quanto scateni la funzione? Secondo me non hai bisogno di due cicli il while lo puoi togliere e usare solo il for.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    La funzione viene eseguita con l'evento onclick su un pulsante.

  4. #4
    L'errore scaturisce dal fatto che nel while hai un ciclo infinito, in quanto non decrementi x.

    Come è stato già detto, per scorrere una collezione di elementi del DOM non è necessario usare cicli annidati.

    Prova questa versione e ricorda di usare il tag [code] quando posti del codice.

    codice:
    function delAll(){
        var cartCont = document.getElementById("pdt_cart"); 
        var contDel=document.getElementsByClassName("cnt");
        for (var i = 0; i < contDel.length; i++){
            cartCont.removeChild(contDel[i]);
        }
        document.getElementById("tot").innerHTML=0;
        document.getElementById("totQnt").innerHTML=0;
    }

  5. #5
    Ciao lucavizzi , grazie per la risposta , lo scriptc come mi hai consigliato tu era il primo che avevo provato ma con questo codice vengono eliminati tutti i contenitore tranne il primo quello con indice 0 , però la console non mi crea errore. Aggiungendo il ciclo wile con la variabile x=i dovrebbe eliminare tutti gli elementi con la classe interessata e il ciclo while è limitato dalla variabile x , è corretto quello che dico?

    ri posto il codice originale per comodità di lettura

    codice:
    function delAll(){
      var cartCont = document.getElementById("pdt_cart");
      var i ;
      var contDel=document.getElementsByClassName("cnt");
      for (i = 0; i < contDel.length; i++){
      var x=i;
        while (x>=0) {
            cartCont.removeChild(contDel[x]);
    
        }
      }
            document.getElementById("tot").innerHTML=0;
            document.getElementById("totQnt").innerHTML=0;
    }
    Ciao Grazie

  6. #6
    Usare cicli annidati è un approccio errato.
    Tanto più se sono loop infiniti.

    La mancata cancellazione di un elemento potrebbe dipendere dallo shift che avviene nella collezione in seguito alla cancellazione.

    Prova questa versione, nota che decremento i nel ciclo for:

    codice:
    function delAll(){
        var cartCont = document.getElementById("pdt_cart"); 
        var contDel=document.getElementsByClassName("cnt");
        for (var i = 0; i < contDel.length; i++){
            cartCont.removeChild(contDel[i]);
            i--;
        }
        document.getElementById("tot").innerHTML=0;
        document.getElementById("totQnt").innerHTML=0;
    }

  7. #7
    Ciao lucavizzi , appena provato e funziona a dovere, ti ringrazio. Sono ancora un utente alle prime armi con JS e non sapevo l'errore con i cicli annidati, grazie per la dritta e mi informerò di più sui cilci e i loro utilizzi.
    Ciao Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.