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

    Trasformare l'attributo rel

    Ecco una funzione fatta da me che sostituisce tutti gli attributi rel uguali a "il_mio_rel" con un evento onclick:
    codice:
    function relTransform() {
    ancore=document.getElementsByTagName("a");
    for (i = 0; i != ancore.length; i++) {
    	if(ancore[i].getAttribute("rel")=="il_mio_rel") { 
    	pathFile=ancore[i].getAttribute("href");
    		ancore[i].setAttribute("href", "#"); 
    			ancore[i].onclick=function() { la_mia_funzione(pathFile); }
    		}
    	}
    }
    Tutto funziona a meraviglia tranne una cosa: la variabile pathFile, argomento di la_mia_funzione, dovrebbe essere diversa in ogni link, invece mi viene dato come valore sempre l'attributo href dell'ultimo elemento dell'array ancore ( ovvero l'ultimo link con rel="il_mio_rel" ).
    Ho provato a sostituire la variabile con un array, ma non funziona lo stesso... Qualche idea?

  2. #2
    Ecco come in teoria dovrebbe funzionare usando un array e invece non funziona:
    codice:
    function relTransform() {
    ancore=document.getElementsByTagName("a");
    
    for (i = 0; i != ancore.length; i++) {
    	if(ancore[i].getAttribute("rel")=="il_mio_rel") { 
    	pathFile=new Array;
    	pathFile[i]=ancore[i].getAttribute("href");
    	window.alert(pathFile[i]);
    	ancore[i].setAttribute("href", "#"); 	
    			ancore[i].onclick=function() { la_mia_funzione(pathFile[i]); }
    
    		}
    	}
    
    }
    
    //questa è per testarla
    function la_mia_funzione(variabile) {
    window.alert(variabile);
    }
    Ed ecco un codice html per provarla:
    codice:
    <html><head><script type="text/javascript" src="test.js"></script></head>
    <body onload="relTransform();">
    aaaaa
    bbbbb
    </body>
    </html>
    Ho messo un window.alert per capire se all'elemento dell'array viene dato un valore, e in effetti si, viene dato. Ma poi nella funzione la_mia_funzione, viene restituito il valore undefined.

  3. #3

  4. #4
    Scusa la mia (enorme) ignoranza, ma pur avendo fatto varie ricerche sul termine scope e provando a fare una funzione adatta, non sono riuscito ad arrivare una soluzione.
    Ho abbozzato una cosa del genere, ma è ovvio che è sbagliata:
    codice:
    function relTransform() {
    ancore=document.getElementsByTagName("a");
    
    	function keepRef() {
    			this.pathAssign=pathFile;
    			this.mClick=function(){ la_mia_funzione(this.pathAssign) }
    		}
    for (i = 0; i != ancore.length; i++) {
    	if(ancore[i].getAttribute("rel")=="il_mio_rel") { 
    	pathFile=ancore[i].getAttribute("href");
    	ancore[i].setAttribute("href", "#"); 
    			ancore[i]=new keepRef;	
    			ancore[i].onclick=ancore[i].mClick;
    
    		}
    	}
    }

    Ho provato a mettere obj come argomento di quella funzione, a levare new keepRef, come avevi fatto tu, ma niente

  5. #5
    In parole povere sono riusciito a capire le soluzioni, ma non so adatterle al mio problema.

  6. #6

  7. #7
    Cacchio, sono ancora alle prese con questo maledetto scope!

  8. #8
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    codice:
    <script type="text/javascript" language="Javascript">
    function relTransform() {
    	var ancore=document.getElementsByTagName("a");
    	pathFile=new Array;
    
    	for (i = 0; i < ancore.length; i++) {
    		if(ancore[i].getAttribute("rel")=="il_mio_rel") { 
    			pathFile[i]=ancore[i].getAttribute("href");
    			ancore[i].setAttribute("href","#");
    
    			// -> questo quello che devi aggiungere
    			var ancora=ancore[i];
    			keepRef(ancora,i)
    		}
    	}
    }
    // -> questo quello che devi aggiungere
    function keepRef(obj,num){
    	obj.onclick=function(){la_mia_funzione(pathFile[num]);return false}
    }
    
    //questa è per testarla
    function la_mia_funzione(variabile) {
    window.alert(variabile);
    }
    </script>
    pathFile chiaramente deve diventare globale

  9. #9
    Grazie mille! Da solo non ci sarei mai arrivato!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.