Le caselle di controllo in genere rappresentano i dati binari memorizzati nel database come valori Sì / No, S / N o 1/0. Le caselle di controllo HTML hanno una cattiva natura per inviare valore al server solo se la casella di controllo è selezionata! Ciò significa che lo script del server su un altro sito deve sapere in anticipo quali sono tutte le possibili caselle di controllo sulla pagina Web per poter memorizzare valori positivi (selezionati) o negativi (non selezionati). In realtà solo i valori negativi sono un problema (quando l'utente deseleziona il valore precedentemente (pre) controllato - come può il server sapere questo quando non viene inviato nulla se non sa in anticipo che questo nome dovrebbe essere inviato). Se si dispone di uno script lato server che crea in modo dinamico lo script UPDATE, c'è un problema perché non si conosce quali caselle di controllo devono essere ricevute per impostare il valore Y per il valore selezionato e il valore N per quelli non selezionati (non ricevuti).
Poiché memorizzo i valori 'Y' e 'N' nel mio database e li rappresento tramite caselle di controllo selezionate e deselezionate nella pagina, ho aggiunto un campo nascosto per ciascun valore (casella di controllo) con i valori 'Y' e 'N', quindi uso le caselle solo per visual rappresentazione e utilizzare il controllo funzione JavaScript semplice () per impostare il valore di if in base alla selezione.
<input type="hidden" id="N1" name="N1" value="Y" />
<input type="checkbox"<?php if($N1==='Y') echo ' checked="checked"'; ?> onclick="check(this);" />
<label for="N1">Checkbox #1</label>
utilizzare un listener onclick JavaScript e chiamare il controllo funzione () per ogni casella di controllo sulla mia pagina Web:
function check(me)
{
if(me.checked)
{
me.previousSibling.previousSibling.value='Y';
}
else
{
me.previousSibling.previousSibling.value='N';
}
}
In questo modo i valori 'Y' o 'N' vengono sempre inviati allo script lato server, sa quali sono i campi che devono essere aggiornati e non è necessario convertire la casella di controllo "on" in "Y" o la casella di controllo non ricevuta in "N" '.
NOTA: anche gli spazi bianchi o la nuova riga sono fratelli, quindi qui ho bisogno di .previousSibling.previousSibling.value. Se non c'è spazio tra allora solo .previousSibling.value
Non è necessario aggiungere esplicitamente listener onclick come prima, è possibile utilizzare la libreria jQuery per aggiungere dinamicamente listener clic con funzione per modificare il valore di tutte le caselle di controllo nella pagina:
$('input[type=checkbox]').click(function()
{
if(this.checked)
{
$(this).prev().val('Y');
}
else
{
$(this).prev().val('N');
}
});