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

    Variabili nei gestori di evento.

    Salve a tutti, devo inserire un gestore di evento Onclick (in modo dinamico) ad un elemento passando come parametro una variabile:

    elmUserDataBox.innerHTML="<div class='closeDataWindow' id='" + strCloseId +"'><span title='Chiudi' onClick='hideBox(strBoxId);'>Chiudi</span></div>";

    La variabile strBoxId è dichiarata e valorizzata qualche riga fuori (all'esterno di un IF dove si trova, l'innerHTML):

    var strBoxId="userDataBox_"+ strUser;

    Il debugger mi dice che strBoxId non è definita, come mai? C'è qualche modo particolare per fare una cosa simile?
    Grazie a chi mi risponderà!
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    l' innerHTML e' una stringa,
    strBoxId e' una stringa e va passata alla funzione una stringa

    prova cosi'

    elmUserDataBox.innerHTML="<div class='closeDataWindow' id='" + strCloseId +"'><span title='Chiudi' onClick='hideBox(\""+strBoxId+"\");'>Chiudi</span></div>";

  3. #3
    Il problema era proprio quello!! Grazie mille non ci pensavo!
    Ma la domanda che mi pongo è: se dovessi passare un reference o un array ad un gestore di evento, come faccio?
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    allora sarebbe corretto come facevi inizialmente,
    ma al momento dell' esecuzione (da intendersi come "al click dell' utente") qualunque cosa tu stia trattando dev' essere accessibile a livello globale

    se come facevi all' inizio hai
    codice:
    function funzione(){
      var variabile=quelloCheVuoi;
      ...innerHTML="<... onclick='altraFunzione(variabile)' ...>";
    }
    variabile e' locale e non funzionera'

    se non ti quadra proponi un esempio

  5. #5
    Quindi sarei costretto a mettere un ciclo fuori dalle funzioni se per esempio devo generare degli ID progressivi?
    I dilettanti costruirono l'Arca, i professionisti il Titanic!

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    fai un esempio di cio' che ti serve fare e come lo faresti tu

  7. #7
    Io ho un problema simile. Ho questa funzione pars:

    codice:
    function pars(xmlDoc)
    		{
    			var nodoItem = new Array();
    			x = xmlDoc.getElementsByTagName('articolo');
    			risultato = "
    
    <center><h1>Numero di articoli presenti "+x.length+": </h1></center>
    
    <ul>";
    
    			risultato += "<ul>";
    			for(i=0;i<x.length;i++)
    			{
    			risultato += "[*]";
    			risultato += "<input type=\"button\" name=\"B"+i+"\" value=\"";
    			risultato += leggiContenuto(x[i], "titolo");
    			risultato += "\" onclick='javascript: visualizza(' " + leggiContenuto(x[i], "link") + " ');}'> -> ";
    			risultato += leggiContenuto(x[i], "descrizione") + "
    ";
    
    			}
    			// chiusura della lista
    			risultato += "[/list]";
    
    			return risultato;
    		}
    richiamata da questa funzione visualizza:

    codice:
    // dato un identificatovo visualizza dentro al DIV corrispondente il File
    function visualizza(File)
    {
    	alert("sono dentro a visualizza")
    	elemento = document.getElementById("main");
    
    	var request = XMLHttp();
    	if(request)
    	{
    		request.onreadystatechange = function()
    		{
    		if(request.readyState === 4)
    			{
    			if(request.status == 200 || request.status == 0)
    				{
                                    //Qui dovrebbe esserci un controllo del parser da usare, se per 
                                    //la home o per i sottofile
    				elemento.innerHTML = pars(request.responseXML);
    				}
    			else
    				{
    				alert("Operazione fallita, errore numero " + request.status);
    				// errore di caricamento
    				elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.
    ";
    				elemento.innerHTML += "Errore riscontrato numero: " + request.status;
    			}
    		}
    	}
    	request.open("GET", File, true);
    	// invio richiesta
    	request.send(null);
    	}
    }
    Le quali pratichiamente chiamata la prima dalla pagina principale mi visualizza nel <div id="main"> un elenco di pulsanti seguiti da una descrizione prendendo questi dati da un file XML che fa da indice.
    Ora però vorrei che premendo uno dei pulsanti venga visualizzato sempre in nel <div id="main"> il file XML cui punta il pulsante.
    in pratica dentro al div main la prima volta vado a scrivere:
    codice:
    onclick='javascript: visualizza( ' " + leggiContenuto(x[i], "link") + " ' )'
    però neanche mettendo
    codice:
    onclick='javascript: visualizza( \' " + leggiContenuto(x[i], "link") + " \' )'
    oppure
    codice:
    onclick='javascript: visualizza( \" " + leggiContenuto(x[i], "link") + " \" )'
    oppure
    codice:
    onclick='javascript: visualizza( &#39 " + leggiContenuto(x[i], "link") + " &#39)'
    la funzione non parte (lo capisco perchè non visualizza alert("sono dentro a visualizza") )

    cosa sbaglio?

  8. #8
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    sempre lo stesso errore:
    i al click dell' utente non esiste, e' fuori scope,
    e se esiste perche' tenuta globale avra' l' ultimo valore ad essa assegnato nel ciclo

    iniettare codice complesso con innerHTML e' una brutta pratica,
    una scorciatoia poco logica che l' "ajax for dummies" ha reso norma
    il DOM si modifica con i metodi del DOM

    vuoi mantenere in scope la variabile che usi nel ciclo?
    http://forum.html.it/forum/showthrea...8#post11118638
    e post seguente

    ciao

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.