2011-06-07 7 views
5

Sto provando a cambiare il valore di un campo di input nascosto, in base al valore di una casella di controllo. Non so molto di Javascript ma questo è quello che ho finora.Come si usa Javascript per modificare il valore di un input nascosto a seconda dello stato di una casella?

<input type="hidden" value="" id="delterms" name="O_" /> 
<input type="checkbox" id="checkbox" onchange="terms()" /> 
<script type="text/javascript"> 
var checked = document.getElementById('checkbox').checked; 
    function terms() { 
    if (checked==false) 
    { 
    document.getElementById('delterms').value='' 
    } 
    else 
    { 
    document.getElementById('delterms').value='Accepted' 
    } 
} 
</script> 

ho preso a lavorare, ma solo il primo scatto, c'è comunque di impostare il valore a seconda dello stato casella di controllo? Sospetto che ci sia un modo molto più semplice e non ho dubbi nel complicare la questione.

risposta

5

Prova ad aggiungere un event listener invece di utilizzare il codice HTML "onchange" attributo, questo potrebbe chiarire le cose per voi e probabilmente rendere il codice più facile da mantenere nel lungo periodo:

<input type="hidden" id="delterms" value="" name="O_" /> 
<input type="checkbox" id="checkbox" /> 
<script type="text/javascript"> 
    var checkbox = document.getElementById('checkbox') 
    , hidden = document.getElementById('delterms'); 
    checkbox.addEventListener('change', function() { 
    hidden.value = (this.checked) ? 'Accepted' : ''; 
    }, false); 
</script> 

L'idea è che il la funzione anonima viene eseguita ogni volta che l'utente fa clic sulla casella di controllo, che imposta il valore del campo nascosto su "Accettato" o sulla stringa vuota, a seconda che la casella sia selezionata o meno.

Questo jsFiddle mostra un esempio funzionante.

+0

Ciao, grazie per la tua risposta. Capisco quello che stai dicendo ma non capisco come ottengo questo per aggiornare il campo nascosto, c'è qualche possibilità che puoi elaborare? – Dave

+0

@Dave: ho aggiornato la mia risposta per dimostrare un modo più affidabile di farlo, fammi sapere se ha senso per te. – maerics

0

La tua variabile checked è impostata solo una volta, quindi è sempre uguale al valore iniziale. Spostalo all'interno della tua funzione terms().

1

Spostare l'assegnazione variabile in funzione, quindi:

function terms() { 
    var checked = document.getElementById('checkbox').checked; 
    if (checked==false) 
0

ottenere il valore controllato all'interno della vostra funzione

<script type="text/javascript"> 

     function terms() { 
     var checked = document.getElementById('checkbox').checked; 
     if (checked==false) 
     { 
     document.getElementById('delterms').value='' 
     } 
     else 
     { 
     document.getElementById('delterms').value='Accepted' 
     } 
    } 
    </script> 
0

Perché caselle di controllo non sono presentati in un form.submit() quando sono incontrollato Io uso un campo nascosto che viene aggiornato quando la casella di controllo viene cliccato.

<input type="hidden" id="chbx" value="" name="0_"> 
<input type="checkbox" id="__chbx" 
    onclick="document.getElementById('chbx').value = 
      document.getElementById('__chbx').checked;"/> 

(ho omesso il jsp-codice che aggiunge la proprietà checked per la casella di controllo di ingresso se era già verificato durante il rendering della pagina.)