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

    Unire this e getElementById nella stessa funzione

    Salve,
    Sto cercando di creare una funzione che, a seconda dello status di un checkbox, visualizzi/nasconda certi elementi
    Sono a buon punto, nel senso che la funzione... funziona, almeno nella sua forma più elementare
    codice:
    function showHide(c,r,a) {
      // c = checkbox, r = rows/items, a = action
      var e = r.split("|");
      var std = ""; var alt = "none";
      if (a != '') { var std = "none"; var alt = ""; }
      if (c.checked) {
        for(var i=0; i<e.length; i++) { document.getElementById(e[i]).style.display = std; }
      } else {
        for(var i=0; i<e.length; i++) { document.getElementById(e[i]).style.display = alt; }
      }
    }
    ...
    ...
    <input type="checkbox" name="checkbox" id="checkbox" onclick="showHide(this,'gianni','')" />
    <div id="gianni" style="display:none;">gianni</div>
    Mi piacerebbe però andare oltre, e fare in modo che il richiamo
    codice:
    showHide(this,'gianni','')
    possa essere utilizzato anche in altre parti della pagina e non solo SUL checkbox
    Un esempio tipico potrebbe essere quello di "attivare" la funzione all'apertura della pagina (il checkbox, a seconda di un valore preso dal database, potrebbe essere inizialmente checkato o meno)

    in altre parole, mi piacerebbe poter utilizzare ANCHE una formula simile a:
    codice:
    onload="showHide('checkbox','gianni','')"
    , e non essere costretto ad usare il this
    In questo caso, nella funzione dovrei mettere:
    codice:
    if (document.getElementById(c).checked) {...
    Come faccio ad unire le due esigenze all'interno della stessa funzione?
    Grazie in anticipo per le risposte :-)
    Home: http://www.ivansweb.com
    Le mie applicazioni gratuite in ASP
    · IWGallery
    · IWNewsletter
    · IWMessenger
    · IWGuestbook

  2. #2
    Non puoi fare così dato che lo scope è completamente diverso. Dovresti riscivere l'intera funzione.
    Io farei così:

    codice:
    window.onload = function(){
      var allInputs = document.getElementsByTagName('input');
      for(var i = 0; i < allInputs.length; i++){
         var inp = allInputs[i];
         if(i.type.toLowerCase() == 'checkbox'){
            inp.onclick = function(){
                showHide(this, 'gianni', '');
            }
         }
      } 
    }
    I DON'T Double Click!

  3. #3
    Ciao Artorius, e grazie per la risposta!
    Uhm... però mi sembra di capire che in questa maniera sono vincolato ad avere un solo checkbox, e non posso passare uno o più elementi da nascondere/visualizzare (come 'gianni')

    Ho scritto questa funzione, che mi sembra che... funzioni :-) C'è qualche controindicazione?
    codice:
    function showHide(c,r,a) {
    	// c = checkbox, r = rows/items, a = action
    	// usare showHide(this,'target','') oppure showHide('trigger','target','')
    	var e = r.split("|");
    	var std = ""; var alt = "none";
    	if (a != '') { var std = "none"; var alt = ""; }
    	if ((typeof(c)) == 'string') { c = document.getElementById(c); }
    	if (c.checked) {
    		for(var i=0; i<e.length; i++) { document.getElementById(e[i]).style.display = std; }
    	} else {
    		for(var i=0; i<e.length; i++) { document.getElementById(e[i]).style.display = alt; }
    	}
    }
    Home: http://www.ivansweb.com
    Le mie applicazioni gratuite in ASP
    · IWGallery
    · IWNewsletter
    · IWMessenger
    · IWGuestbook

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.