Altro Mistero Javascript

di il
15 risposte

Altro Mistero Javascript

Scusate se faccio domande semplici ma io ho difficoltà a capire certe cose

function carica_gruppo_prezzare(){
	var inserzioni = document.getElementsByTagName("textarea");
	var n_inserzioni = inserzioni.length;
	for (var i = 1; i <= n_inserzioni; i++){
		var imgtag = document.querySelectorAll('img[name="'+i+'"]');
		var n = imgtag.length;
		for (var x = 0; x <= n; x++){
			alert(imgtag[x].id);
		}
	}
}
(di img con attributo name ce n'è più di una)
Non capisco perché il primo for non prosegue, e mi fa solamente un ciclo
Se invece sostituisco
alert(imgtag[x].id);
con
con alert("ciao");

allora mi esegue i 76 cicli che deve eseguire.
perché n_inserzioni è = 76

15 Risposte

  • Re: Altro Mistero Javascript

    Ci sono 1 ora e mezza cercando di cavarne piede... se secondo voi è normale...
  • Re: Altro Mistero Javascript

    E questo invece me lo esegue 76 volte... bohhhhhh!!!!!
    
    function carica_gruppo_prezzare(){
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= n_inserzioni; i++){
    		var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    		alert(imgtag[0].id);
    	}
    }
    
  • Re: Altro Mistero Javascript

    Devo riuscire a fare questo
    document.getElementById(imgtag[x].id).setAttribute("src", imgtag[x].id);

    tutti quelli che hanno name = 1 devo aggiungergli l'attributo src con il valore uguale al loro id
    e così via per quelli che hanno name = 2 ecc ecc
  • Re: Altro Mistero Javascript

    Eppure se io faccio
    function carica_gruppo_prezzare(){
    	var count = 0;
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		if(count <= 5){
    			var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    			alert(imgtag.length+" "+imgtag[0].name);
    		}
    	}
    }
    
    mi escono 3 alert con 1 3, 1 8, 1 8
    mi escono 3 alert con 3 1, 8 2, 8 3

    cioè che il name=1 ha 3 foto, name=2 ha 8 foto, name=3 ha 8 foto
  • Re: Altro Mistero Javascript

    function carica_gruppo_prezzare(){
    	var count = 0;
    	var contatore = 0;
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		if(count <= 5){
    			var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    			for (var contatore = 1; contatore <= imgtag.length; contatore++){
    				alert(imgtag[contatore].id);
    			}
    		}
    	}
    }
    
    ma perché si ferma!!!!!!!!!!! il nervoso
  • Re: Altro Mistero Javascript

    MA IO MI DICO!
    function carica_gruppo_prezzare(){
    	var count = 0;
    	var contatore = 0;
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		if(count <= 5){
    			var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    			alert(imgtag[2].id);
    			/*
    			for (contatore = 1; contatore <= imgtag.length; contatore++){
    				alert(imgtag[contatore].id);
    			}
    			*/
    		}
    	}
    }
    
    possibile che se quel alert(imgtag[2].id); gli cambio il numero allora me li vede tutti mentre invece se tolgo l'alert e decommento il for allora si blocca al primo ciclo!!
    ma come è possibile???
  • Re: Altro Mistero Javascript

    function carica_gruppo_prezzare(){
    	var count = 0;
    	var contatore = 0;
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		if(count <= 5){
    			var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    			var con = 1;
    			document.getElementById(imgtag[con].id).setAttribute("src", imgtag[con].id);
    			/*
    			for (contatore = 1; contatore <= imgtag.length; contatore++){
    				alert(imgtag[contatore].id);
    			}
    			*/
    		}
    	}
    }
    
    eppure questo va...
    se decommento il for niente... boh vabbé
    devo ciclare quel benedetto contatore e non ci riesco
  • Re: Altro Mistero Javascript

    Boh non ci riesco...
    function carica_gruppo_prezzare(){
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    		for (var x = 0; x <= imgtag.length; x++){
    			alert(imgtag[x].id);
    		}
    	}
    }
    	
    
    dovrebbe farmi 3 cicli da 3 alert l'uno... e invece mi fa un solo ciclo da 3 alert
    non capisco perché non continua
  • Re: Altro Mistero Javascript

    Hai controllato quanto vale

    imgtag.length

    ?
  • Re: Altro Mistero Javascript

    Il lenght è giusto, vale il numero che deve valere

    io non capisco solo perché questo
    function carica_gruppo_prezzare(){
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    		for (var x = 0; x <= imgtag.length; x++){
    			alert(imgtag[x].id);
    		}
    	}
    }
    
    cicla solo una volta.
    è come se non mi incrementasse i++

    se io cambio alert(imgtag[x].id); con un semplice alert(imgtag.lenght); allora la i viene incrementata
    eppure se io al posto di alert(imgtag[x].id); metto alert(imgtag[0].id); allora la i viene incrementata

    boh! io non riesco proprio a capire
  • Re: Altro Mistero Javascript

    function carica_gruppo_prezzare(){
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    		alert(imgtag.length);
    		for (var x = 0; x <= imgtag.length; x++){
    			alert(imgtag[x].id);
    		}
    	}
    }
    
    Ricapitolando
    n_inserzioni è giusto è = 76
    for (var i = 1; i <= 3; i++) al posto di 3 dovrei mettere n_inserzioni ma metto 3 per non farla troppo lunga
    var imgtag = document.querySelectorAll('img[name="'+i+'"]'); è giusto, perché ad ogni ciclo imgtag.lenght = 3, poi è uguale a 8, e poi nuovamente = 8
    perché trova tutte le immagini che hanno come name = i
    quindi ciclo tutte le name = i
    al primo ciclo sono 3, quindi mi dovrebbero comparire 3 alert che hanno l'id delle 3 trovate
    finito il giro dovrebbe risalire, fare i++ e invece si blocca.
    NON ENTRA proprio nel nuovo ciclo, perché se metto un alert(i); subito dopo il for, l'alert non compare. quindi non sta proprio entrando nel for
  • Re: Altro Mistero Javascript

    Così come è quel codice mi esce un alert con scritto 3, poi 3 alert con l'id delle img trovate.
    poi si ferma.
    se io invece al posto di
    alert(imgtag[x].id);
    metto
    alert(imgtag[0].id);
    allora mi completa tutti i for. Solo che io ho bisogno di metterci una x lì, che incrementa.
    diversamente mi dà l'id solo della prima immagine per ogni giro
    ma se ci metto la x allora si ferma al primo giro
    boh, assurdo, non riesco a trovare dove sta il problema
    eppure sto solamente sostituendo uno 0 con la x
  • Re: Altro Mistero Javascript

    melixo ha scritto:


    Ricapitolando [...]
    Ricapitolando, secondo me dovresti
  • Re: Altro Mistero Javascript

    melixo ha scritto:


    function carica_gruppo_prezzare(){
    	var inserzioni = document.getElementsByTagName("textarea");
    	var n_inserzioni = inserzioni.length;
    	for (var i = 1; i <= 3; i++){
    		var imgtag = document.querySelectorAll('img[name="'+i+'"]');
    		alert(imgtag.length);
    		for (var x = 0; x <= imgtag.length; x++){
    			alert(imgtag[x].id);
    		}
    	}
    }
    
    Questa riga è senz'altro sbagliata:
    for (var x = 0; x <= imgtag.length; x++) {
    poiché il ciclo va da 0 a imgtag.length - 1, quindi devi usare un minore (<) e non minore o uguale (<=):
    for (var x = 0; x < imgtag.length; x++) {
    Per il resto, vale quanto già detto nella precedente risposta.
Devi accedere o registrarti per scrivere nel forum
15 risposte