PDA

Visualizza la versione completa : Passare valore di altro tag


JANUS70
29-03-2020, 19:40
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')


echo "<select id=\"fb1\" class=\"fsel_3\" onchange=mappa_rca_veicolo(this) name='tipo_veicolo' >";


echo "<select id=\"fa3\" class=\"fsel_6\" name='copertura' >";

Grazie mille

JANUS70
30-03-2020, 13:37
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

KillerWorm
30-03-2020, 14:03
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?

JANUS70
30-03-2020, 15:51
all'interno della funzione ho bisogno di testare il contenuto di 2 combo


- fb1 (che richiama la funzione):



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:



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>"; }



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).s tyle.display='table-row';}
else
{
//--> si nasconde la riga RCA
document.getElementsByClassName('auto').item(2).st yle.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).st yle.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
}
}

KillerWorm
30-03-2020, 21:30
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>:

\"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.

JANUS70
01-04-2020, 11:55
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)


<option value="3">RCA ARD</option>




<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>



<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>



<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).s tyle.display='table-row';}
else
{
//--> si nasconde la riga RCA
document.getElementsByClassName('auto').item(2).st yle.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).st yle.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>




<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).s tyle.display='table-row';}
else
{
//--> si nasconde la riga RCA
document.getElementsByClassName('auto').item(2).st yle.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).st yle.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

KillerWorm
01-04-2020, 22:08
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:

<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):

<select onchange=tua_funzione( this ) name='pippo' >
Che succede in questo caso?

A livello di codice JavaScript, questa sintassi è perfettamente valida e corretta:

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:

<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 (https://validator.w3.org/).

Per il resto, mi fa piacere che il problema si sia risolto.
Buon proseguimento :ciauz:

Loading