Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080

    Aiuto modifica script al cambio valore select

    Ho due select:
    codice HTML:
     <select name="artista" id="artista" class="event" onchange="aggiornaHidden(this)">
    <option value="">Seleziona artista</option>
    <option value="39">artista1</option>
    <option value="38">artista2</option>
    </select>
    
    <select name="locale" id="locale" class="event" onchange="aggiornaHidden(this)">
    <option value="">Seleziona locale</option>
    <option value="10">locale1</option>
    <option value="11">locale2</option>
    </select>
    La funzione js non fa altro che inserire in un campo di testo hidden il valore selezionato:
    codice:
    function aggiornaHidden(sel){
      var f = document.frm;
      f.sel_text.value = sel.options[sel.selectedIndex].text;
    
     }
    Essendo che la ricerca che devo fare è o su uno o sull'altro vorrei che se seleziono un valore da "artisti" la select "locali" mi vada sul valore "Seleziona locale" e viceversa.
    Grazie

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,684
    Io farei una funzione del genere:
    codice:
    function resetSelect(id){
      document.getElementById(id).selectedIndex = 0; 
    }
    da richiamare magari sull'onchange in questo modo:
    codice:
    <select name="artista" id="artista" class="event" onchange="aggiornaHidden(this);resetSelect('locale');">
    
    <select name="locale" id="locale" class="event" onchange="aggiornaHidden(this);resetSelect('artista');">
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Perfettamente funzionante!
    Dovendo resettare due select (per il post avevo semplificato il problema) ho fatto così:
    codice:
    <select name="artista" id="artista" class="event" onchange="aggiornaHidden(this);resetSelect('formazione');resetSelect('locale');">

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,684
    Dovendo resettare due select (per il post avevo semplificato il problema) ho fatto così:
    Benissimo.
    Se comunque vuoi ottimizzare il sistema, ad esempio per resettare molteplici select in un colpo solo senza dover richiamare quella funzione per ciascun elemento, puoi fare una cosa del genere:

    codice:
    function resetSelect(selector,excludeme){
      var s=document.querySelectorAll(selector),i=s.length;
      while(i--) if(s[i]!==excludeme) s[i].selectedIndex = 0;
    }
    dove il primo argomento (selector) non è altro che un selettore CSS che viene passato al metodo querySelectorAll(), per cui puoi impostarlo come meglio ti pare per selezionare gli elementi da resettare, anche usando una semplice classe. In tal caso ho previsto un secondo parametro per poter escludere, dal reset, uno specifico elemento (ad esempio quello da cui è stata chiamata la funzione).

    Potresti avere una situazione del genere:
    codice:
    <select class="selectresettabile" onchange="resetSelect('.selectresettabile',this);">
      <option value="">--</option>
      <option value="">1</option>
      <option value="">2</option>
    </select>
    
    <select class="selectresettabile" onchange="resetSelect('.selectresettabile',this);">
      <option value="">--</option>
      <option value="">1</option>
      <option value="">2</option>
    </select>
    
    <select class="selectresettabile" onchange="resetSelect('.selectresettabile',this);">
      <option value="">--</option>
      <option value="">1</option>
      <option value="">2</option>
    </select>
    
    <input type="button" value="RESET ALL SELECTS" onclick="resetSelect('.selectresettabile');">
    Nota la chiamata della funzione, uguale per tutti gli elementi select:
    codice:
    resetSelect('.selectresettabile',this);
    in tal caso ho passato il selettore ".selectresettabile" per selezionare gli elementi definiti con quella classe, ma potresti benissimo definire una cosa come "#artista,#locale,#pippo" per cui saranno selezionati i tre elementi con questi id (esattamente come un selettore CSS). A questo punto, il this passato come secondo argomento andrà ad escludere quello specifico elemento da cui è chiamata la funzione.

    Giusto come esempio, sull'ultimo input button non viene passato il secondo argomento, per cui saranno resettati tutti gli elementi considerati attraverso il selettore.

    Ovviamente questa è giusto un'ottimizzazione della soluzione iniziale, ma è chiaro che puoi risolvere in svariati altri modi.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie!
    Potrebbe essermi utile perchè appunto ho semplificato molto il problema che ho!
    Adesso studio!

Tag per questa discussione

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.