Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    Passare valore di altro tag

    Ciao,
    io avrei la necessità di passare alla funzione js, oltre che al valore del tag da cui richiamo la funzione, anche il valore di un secondo tag .. (nell'esempio il contenuto di 'copertura')

    Codice PHP:
    echo "<select id=\"fb1\" class=\"fsel_3\" onchange=mappa_rca_veicolo(this) name='tipo_veicolo' >"
    Codice PHP:
    echo "<select id=\"fa3\" class=\"fsel_6\"  name='copertura' >"
    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    In sostanza devo testare all'interno della funzione il 'valore' di una ltro campo (combo) ..

    ho pensato di fare così ..
    if(document.getElementById('fa3').value == 'RCA'
    ma in realtà non funziona, e in effetti se scrivo un 'alert' mi viene restituito un numero (tra l'altro mi sembra senza un senso logico rispetto alla scelta che viene selezionata dalla combo)

    alert(document.getElementById('fa3').value);
    -> restituisce un numero

    Grazie

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Ciao, difficile capire il problema senza vedere il resto del codice sia JavaScript sia HTML.

    Mi verrebbe da pensare che ci siano diversi elementi con lo stesso id fa3, il che sarebbe comunque scorretto.

    Bisogna comunque capire cosa ci sta dentro quel <select> e in particolare il value che hai attribuito alle varie <option>.

    Puoi postare la parte HTML (risultante dal tuo PHP), con l'intera funzione JavaScript mappa_rca_veicolo() o comunque la parte interessata a questa azione?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    all'interno della funzione ho bisogno di testare il contenuto di 2 combo


    - fb1 (che richiama la funzione):

    Codice PHP:
    echo "<select id=\"fb1\" class=\"fsel_3\" onchange=mappa_rca_veicolo(this) name='tipo_veicolo' >";     echo "<option value=\"  $tipo_veicolo     \">" $tipo_veicolo "</option>";                        if ($tipo_veicolo != '')                                                                                {echo "<option value=\"\"> </option>";}                                                                 echo "<option value=\"AUTOVETTURA\">  AUTOVETTURA </option>";                                        echo "<option value=\"AUTOTASSAMETRO\">  AUTOTASSAMETRO </option>";                                  echo "<option value=\"AUTOBUS\">  AUTOBUS </option>";                                                echo "<option value=\"TRASPORTO COSE\">  TRASPORTO COSE</option>";                                   echo "<option value=\"CICLOM./MOTOCICLO\">  CICLOM./MOTOCICLO </option>";                            echo "<option value=\"MACCHINA OPERATRICE\">  MACCH. OPERATRICE </option>";                          echo "<option value=\"MACCHINA AGRICOLA\">  MACCHINA AGRICOLA </option>";                            echo "<option value=\"RIMORCHIO\">  RIMORCHIO </option><br>";                                        echo "<option value=\"NATANTE PRIVATO\">  NATANTE PRIVATO </option>";                                echo "<option value=\"NATANTE PUBBLICO\">  NATANTE PUBBLICO </option>";                              echo "<option value=\"LIBRO MATRICOLA\">  LIBRO MATRICOLA </option>";                              echo "</select>"
    - fa3:

    Codice PHP:
    echo "<select id=\"fa3\" class=\"fsel_6\"  name='copertura' >";        echo "<option value=\"$id_copertura\">" $copertura "<br>";         foreach ($coperture_arr as $ind => $valore)                              {// -> estrazione dalla stringa dell'id-copertura e della copertura     $pos_sep = strrpos($valore, '|');                                      $id_cop = substr($valore, 0, $pos_sep );                               $pos_sep = $pos_sep + 1;                                               $cop = substr($valore, $pos_sep );                                                                                                                  echo "<option value=\"$id_cop\">" . $cop . "</option> <br>";          } 
    codice:
    function mappa_rca_veicolo(veicolo)
      {
       var x = veicolo.selectedIndex;
       var y = veicolo.options[x]
       var valore = y.text;
    
    
       if(valore != 'LIBRO MATRICOLA' && valore != 'RIMORCHIO') 
          {
           //--> si visualizza la riga RCA  
           if(document.getElementById('fa3').value == 'RCA' || 
              document.getElementById('fa3').value == 'RCA ARD')   // -> copertura
             {document.getElementsByClassName('auto').item(2).style.display='table-row';}
           else
       	     {
       	      //--> si nasconde la riga RCA
              document.getElementsByClassName('auto').item(2).style.display='none';
             
              document.getElementById('fb5').value = '';         // -> classe di merito
              document.getElementById('fb6').checked=false;      // -> bersani
              document.getElementById('fb6b').checked=false;     // -> bersani   
              document.getElementById('fb6t').checked=false;     // -> traino          
              document.getElementById('fb6tb').checked=false;    // -> traino          
              document.getElementById('fb10').value = '';        // -> note
       	     }       
          } 
       else
       	  {
       	   //--> si nasconde la riga RCA
           document.getElementsByClassName('auto').item(2).style.display='none';
    
    
           document.getElementById('fb5').value = '';         // -> classe di merito
           document.getElementById('fb6').checked=false;      // -> bersani
           document.getElementById('fb6b').checked=false;     // -> bersani   
           document.getElementById('fb6t').checked=false;     // -> traino          
           document.getElementById('fb6tb').checked=false;    // -> traino          
           document.getElementById('fb10').value = '';        // -> note
       	  }
      }

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Dal codice sorgente PHP è difficile riprodurre e capire quale codice HTML salta fuori.
    Ripeto, puoi postare la parte HTML che viene restituita dal tuo PHP?

    Così, ad occhio, vedo prima di tutto che stai mettendo dei <br> dentro i <select>, che invece dovrebbero contenere solo elementi <option>:
    codice:
    \"RIMORCHIO\">  RIMORCHIO </option><br>";
    [...]
    echo "<option value=\"$id_copertura\">" . $copertura . "<br>"
    .
    Per gli attributi dei tag HTML è sempre bene racchiudere il loro valore tra virgolette; qui non lo hai fatto:
    onchange=mappa_rca_veicolo(this)
    Anche se questo è valido per l'HTML, non lo è nel caso si utilizzi XHTML. E' comunque preferibile usare sempre le virgolette per prevenire qualsiasi possibile invalidazione del codice.

    ...
    Nel caso la pagina sia accessibile pubblicamente online sarebbe utile poterla analizzare. Eventualmente, se possibile, posta il link; sarà più semplice aiutarti.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    ho risolto .. grazie alla visualizzazione dell'html ..

    il value che mi restituiva la funzione era corretto (un numero perchè il valore dell'option è l'indice della tabella da cui estrae il valore)

    codice HTML:
    <option value="3">RCA ARD</option>

    codice HTML:
    <select id="fa3" class="fsel_6" onchange=mappa_rca(this) name='copertura' >   <option value=""></option>   <option value="2">ARD</option>   <option value="11">AZIENDA</option>   <option value="10">CASA</option>   <option value="12">ENERGIA</option>   <option value="14">FIDEJUSSIONE</option>   <option value="8">INFORTUNI</option>   <option value="9">MALATTIA</option>   <option value="1">RCA</option>   <option value="3">RCA ARD</option>   <option value="4">RESP. CIVILE</option>   <option value="13">TUTELA GIUDIZIARIA</option>   <option value="15">VIAGGIO</option>   <option value="5">VITA CAPITALIZ.</option>   <option value="6">VITA CASO MORTE</option>   <option value="7">VITA MISTA</option></select>
    codice HTML:
    <select id="fb1" class="fsel_3" onchange=mappa_rca_veicolo(this) name='tipo_veicolo' >   <option value="       "></option>   <option value="AUTOVETTURA">  AUTOVETTURA </option>   <option value="AUTOTASSAMETRO">  AUTOTASSAMETRO </option>   <option value="AUTOBUS">  AUTOBUS </option>   <option value="TRASPORTO COSE">  TRASPORTO COSE</option>   <option value="CICLOM./MOTOCICLO">  CICLOM./MOTOCICLO </option>   <option value="MACCHINA OPERATRICE">  MACCH. OPERATRICE </option>   <option value="MACCHINA AGRICOLA">  MACCHINA AGRICOLA </option>   <option value="RIMORCHIO">  RIMORCHIO </option><br>   <option value="NATANTE PRIVATO">  NATANTE PRIVATO </option>   <option value="NATANTE PUBBLICO">  NATANTE PUBBLICO </option>   <option value="LIBRO MATRICOLA">  LIBRO MATRICOLA </option></select>
    codice:
    <script type="text/javascript"> 
    function mappa_rca(copertura)                                                     
      {
       var x = copertura.selectedIndex;
       var y = copertura.options[x]
       var valore = y.text;
    
    
       if(valore == 'RCA' || valore == 'RCA ARD') 
          {
           //--> si visualizzano la riga RCA (solo per veicolo 'fb1' diverso da 'RIMORCHIO' e 'LIBRO MATRICOLA')
           //   <option value="RIMORCHIO">  RIMORCHIO </option>
           //   <option value="LIBRO MATRICOLA">  LIBRO MATRICOLA </option>
           //--> si visualizzano la riga RCA
           if(document.getElementById('fb1').value != 'LIBRO MATRICOLA' && 
              document.getElementById('fb1').value != 'RIMORCHIO')             
             {document.getElementsByClassName('auto').item(2).style.display='table-row';}   
           else
       	     {                                                                                     	
       	      //--> si nasconde la riga RCA                                                        	
              document.getElementsByClassName('auto').item(2).style.display='none';                	
                                                                                                   	
              document.getElementById('fb5').value = '';         // -> classe di merito            	
              document.getElementById('fb6').checked=false;      // -> bersani                     	
              document.getElementById('fb6b').checked=false;     // -> bersani                     	
              document.getElementById('fb6t').checked=false;     // -> traino                      	
              document.getElementById('fb6tb').checked=false;    // -> traino                      	
              document.getElementById('fb10').value = '';        // -> note                        	
       	     }                                                                                     
          } 
       else
       	  {
       	   //--> si nasconde la riga RCA
           document.getElementsByClassName('auto').item(2).style.display='none';
    
    
           document.getElementById('fb5').value = '';         // -> classe di merito
           document.getElementById('fb6').checked=false;      // -> bersani
           document.getElementById('fb6b').checked=false;     // -> bersani
           document.getElementById('fb6t').checked=false;     // -> traino   
           document.getElementById('fb6tb').checked=false;    // -> traino              
           document.getElementById('fb10').value = '';        // -> note
       	  }
      }	
    </script>
    codice:
    <script type="text/javascript"> 
    function mappa_rca_veicolo(veicolo)                                                     
      {
       var x = veicolo.selectedIndex;
       var y = veicolo.options[x]
       var valore = y.text;
    
    
       if(valore != 'LIBRO MATRICOLA' && valore != 'RIMORCHIO') 
          {
           //--> si visualizzano la riga RCA (solo per copertura 'fa3' 'RCA' e 'RCA ARD')
           //    <option value="1">RCA</option>
           //    <option value="3">RCA ARD</option>
           //--> si visualizzano la riga RCA
           if(document.getElementById('fa3').value == '1' || document.getElementById('fa3').value == '3')   // copertura
             {document.getElementsByClassName('auto').item(2).style.display='table-row';}
           else
       	     {
       	      //--> si nasconde la riga RCA
              document.getElementsByClassName('auto').item(2).style.display='none';
             
              document.getElementById('fb5').value = '';         // -> classe di merito
              document.getElementById('fb6').checked=false;      // -> bersani
              document.getElementById('fb6b').checked=false;     // -> bersani   
              document.getElementById('fb6t').checked=false;     // -> traino          
              document.getElementById('fb6tb').checked=false;    // -> traino          
              document.getElementById('fb10').value = '';        // -> note
       	     }       
          } 
       else
       	  {
       	   //--> si nasconde la riga RCA
           document.getElementsByClassName('auto').item(2).style.display='none';
    
    
           document.getElementById('fb5').value = '';         // -> classe di merito
           document.getElementById('fb6').checked=false;      // -> bersani
           document.getElementById('fb6b').checked=false;     // -> bersani   
           document.getElementById('fb6t').checked=false;     // -> traino          
           document.getElementById('fb6tb').checked=false;    // -> traino          
           document.getElementById('fb10').value = '';        // -> note
       	  }
      }	
    </script>
    Invece non ho capito questa questione ..

    "Per gli attributi dei tag HTML è sempre bene racchiudere il loro valore tra virgolette; qui non lo hai fatto:"

    Grazie mille

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    ho risolto .. grazie alla visualizzazione dell'html ..
    Bene

    Invece non ho capito questa questione ..

    "Per gli attributi dei tag HTML è sempre bene racchiudere il loro valore tra virgolette; qui non lo hai fatto:"
    Per virgolette intendo 'apici' o "doppi apici".

    Il tuo codice dovrebbe essere meglio scritto, in questo modo:
    codice:
    <select id="fa3" class="fsel_6" onchange="mappa_rca(this)" name='copertura' >
    <select id="fb1" class="fsel_3" onchange="mappa_rca_veicolo(this)" name='tipo_veicolo' >
    vedi gli apici che ho aggiunto in rosso.

    Ripeto, anche se in quel tuo particolare caso il markup HTML possa risultare valido, perché è consentito definire il valore di un attributo anche senza racchiuderlo tra apici (o doppi apici) quando questo è costituito da una serie di caratteri in cui non ci siano spazi, è comunque più sicuro (ed è buona pratica) usare sempre gli apici; più che altro per una questione di pulizia del codice e per evitare prevedibili grattacapi.

    Se non usi questo accorgimento per lo sviluppo del codice HTML, a lungo andare potrebbero infatti verificarsi varie situazioni in cui il codice risulta errato, con conseguenti malfunzionamenti.

    Un esempio tra tanti, potrebbe accadere che "distrattamente", per un qualsiasi possibile motivo, tu andassi a scrivere una cosa del genere (nota gli spazi attorno a this):
    codice:
    <select onchange=tua_funzione( this ) name='pippo' >
    Che succede in questo caso?

    A livello di codice JavaScript, questa sintassi è perfettamente valida e corretta:
    codice:
    tua_funzione( this )
    ... quindi tu ti aspetteresti che il tutto funzioni come dovrebbe, ma non è così.

    Il browser infatti va a cercare di interpretare il markup HTML e correggere, come meglio crede, eventuali errori.
    A quel punto il codice HTML è interpretato in questo modo:
    codice:
    <select onchange="tua_funzione(" this="" )="" name="pippo">
    Quel this, e così il resto, viene interpretato come un nome di attributo HTML, rompendo quindi il codice JavaScript e generando un errore che compromette il funzionamento dello script.

    Quanto spreco di tempo e di risorse e mal di pancia pensi di poter avere prima di riuscire a decifrare dove sta un errore del genere, apparentemente così banale ma che può risultare ben nascosto anche agli occhi dei più esperti?

    Personalmente penso che la regola base in questo casi sia "prevenire è meglio che curare".

    L'uso di buone pratiche, durante lo sviluppo di codice, è sempre una buona pratica

    ...

    L'altro punto che ti ho segnalato sono quei <br> da togliere da mezzo alle <option>... vedo che qualcuno è rimasto.

    Per verificare eventuali errori a livello di HTML, e provvedere quindi a correggerli, consiglio l'uso di un validatore.

    Per il resto, mi fa piacere che il problema si sia risolto.
    Buon proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.