Casella di controllo Javascript su Cambia


130

Ho una casella di controllo in un modulo e mi piacerebbe che funzionasse secondo il seguente scenario:

  • se qualcuno lo controlla, il valore di un campo di testo ( totalCost) dovrebbe essere impostato su 10.
  • quindi, se torno indietro e deseleziono, una funzione calculate()imposta il valore di totalCostsecondo altri parametri nel modulo.

Quindi, fondamentalmente, ho bisogno della parte in cui, quando seleziono la casella di controllo, faccio una cosa e quando la deseleziono, ne faccio un'altra.


Checkboxid.Checked == true / false {Scrivi il tuo evento}.
Naresh,

Risposte:


150
function calc()
{
  if (document.getElementById('xxx').checked) 
  {
      document.getElementById('totalCost').value = 10;
  } else {
      calculate();
  }
}

HTML

<input type="checkbox" id="xxx" name="xxx" onclick="calc();"/>

30
E se l'utente utilizza la tastiera?
Thom

6
Ecco un JsFiddle in cui è possibile testare tutti i diversi modi: clic, tastiera, etichetta e chiave di accesso. Tutti innescano l'evento in Firefox.
Roman Starkov,

4
Sfortunatamente, l'evento non viene attivato quando lo stato della casella di controllo viene modificato tramite JavaScript.
StanE,

2
lol, usa questo da javascript $ ('# checkbox'). attr ('checked', 'checked'); $ ( '# casella di controllo') clicca ().;
Senad Meškin,

5
In alternativa, è necessario utilizzare onchange, progettato specificamente per il caso d'uso dell'OP. (grazie ReeCube di seguito per il link) developer.mozilla.org/en-US/docs/Web/Events/change
Armando

90

Javascript puro:

const checkbox = document.getElementById('myCheckbox')

checkbox.addEventListener('change', (event) => {
  if (event.target.checked) {
    alert('checked');
  } else {
    alert('not checked');
  }
})
My Checkbox: <input id="myCheckbox" type="checkbox" />


28

Se stai usando jQuery .. allora posso suggerire quanto segue: NOTA: ho fatto alcune ipotesi qui

$('#my_checkbox').click(function(){
    if($(this).is(':checked')){
        $('input[name="totalCost"]').val(10);
    } else {
        calculate();
    }
});

19

Usa un evento onclick, perché ogni clic su una casella di controllo lo modifica effettivamente.


29
Cosa succede se l'utente utilizza la tastiera?
Thom

14
È strage, ma è ancora un clic
SergeS

6
Effettivamente il clic funziona, viene persino attivato quando si utilizza un'etichetta per selezionare la casella di controllo. Ma dovresti usare meglio l'evento "cambia"! L'evento 'change' è destinato a questo: developer.mozilla.org/en-US/docs/Web/Events/change
ReeCube

Che dire del doppio clic?
Chalky

4
Bene, sono due clic ora non è vero?
Rohmer,

13

La seguente soluzione utilizza jquery. Supponiamo che tu abbia una casella di controllo con ID di checkboxId.

const checkbox = $("#checkboxId");

checkbox.change(function(event) {
    var checkbox = event.target;
    if (checkbox.checked) {
        //Checkbox has been checked
    } else {
        //Checkbox has been unchecked
    }
});

4

HTML:

<input type="checkbox" onchange="handleChange(event)">

JS:

function handleChange(e) {
     const {checked} = e.target;
}

3

Fare riferimento alla casella di controllo in base al suo ID e non con # Assegna la funzione all'attributo onclick anziché utilizzare l'attributo change

var checkbox = $("save_" + fieldName);
checkbox.onclick = function(event) {
    var checkbox = event.target;

    if (checkbox.checked) {
        //Checkbox has been checked
    } else {
        //Checkbox has been unchecked
    }
};

1

So che questa sembra una risposta noob, ma la sto mettendo qui in modo che possa aiutare gli altri in futuro.

Supponiamo che tu stia costruendo una tabella con un ciclo foreach. E allo stesso tempo aggiungendo caselle di controllo alla fine.

<!-- Begin Loop-->
<tr>
 <td><?=$criteria?></td>
 <td><?=$indicator?></td>
 <td><?=$target?></td>
 <td>
   <div class="form-check">
    <input type="checkbox" class="form-check-input" name="active" value="<?=$id?>" <?=$status?'checked':''?>> 
<!-- mark as 'checked' if checkbox was selected on a previous save -->
   </div>
 </td>
</tr>
<!-- End of Loop -->

Posiziona un pulsante sotto il tavolo con un input nascosto:

<form method="post" action="/goalobj-review" id="goalobj">

 <!-- we retrieve saved checkboxes & concatenate them into a string separated by commas.i.e. $saved_data = "1,2,3"; -->

 <input type="hidden" name="result" id="selected" value="<?= $saved_data ?>>
 <button type="submit" class="btn btn-info" form="goalobj">Submit Changes</button>
</form>

Puoi scrivere la tua sceneggiatura in questo modo:

<script type="text/javascript">
    var checkboxes = document.getElementsByClassName('form-check-input');
    var i;
    var tid = setInterval(function () {
        if (document.readyState !== "complete") {
            return;
        }
        clearInterval(tid);
    for(i=0;i<checkboxes.length;i++){
        checkboxes[i].addEventListener('click',checkBoxValue);
    }
    },100);

    function checkBoxValue(event) {
        var selected = document.querySelector("input[id=selected]");
        var result = 0;
        if(this.checked) {

            if(selected.value.length > 0) {
                result = selected.value + "," + this.value;
                document.querySelector("input[id=selected]").value = result;
            } else {
                result = this.value;
                document.querySelector("input[id=selected]").value = result;
            }
        }
        if(! this.checked) { 

// trigger if unchecked. if checkbox is marked as 'checked' from a previous saved is deselected, this will also remove its corresponding value from our hidden input.

            var compact = selected.value.split(","); // split string into array
            var index = compact.indexOf(this.value); // return index of our selected checkbox
            compact.splice(index,1); // removes 1 item at specified index
            var newValue = compact.join(",") // returns a new string
            document.querySelector("input[id=selected]").value = newValue;
        }

    }
</script>

Gli ID delle tue caselle di controllo verranno inviati come stringa "1,2" all'interno della variabile di risultato. È quindi possibile suddividerlo a livello di controller come desiderato.


0

Javascript

  // on toggle method
  // to check status of checkbox
  function onToggle() {
    // check if checkbox is checked
    if (document.querySelector('#my-checkbox').checked) {
      // if checked
      console.log('checked');
    } else {
      // if unchecked
      console.log('unchecked');
    }
  }

HTML

<input id="my-checkbox" type="checkbox" onclick="onToggle()">


0

provare

totalCost.value = checkbox.checked ? 10 : calculate();

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.