Kotak centang Javascript di Ubah


130

Saya memiliki kotak centang dalam formulir dan saya ingin berfungsi sesuai dengan skenario berikut:

  • jika seseorang memeriksanya, nilai textfield ( totalCost) harus diatur ke 10.
  • kemudian, jika saya kembali dan menghapus centangnya, fungsi calculate()menetapkan nilai totalCostsesuai dengan parameter lain dalam formulir.

Jadi pada dasarnya, saya memerlukan bagian di mana, ketika saya memeriksa kotak centang saya melakukan satu hal dan ketika saya tidak mencentangnya, saya melakukan yang lain.


Checkboxid.Checked == true / false {Tulis acara Anda}.
Naresh

Jawaban:


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
Dan jika pengguna menggunakan keyboard?
thomthom

6
Inilah JsFiddle tempat semua cara berbeda dapat diuji: klik, keyboard, label, dan akseskey. Mereka semua memicu acara di Firefox.
Roman Starkov

4
Sayangnya, acara ini tidak dipicu ketika kondisi kotak centang diubah melalui JavaScript.
StanE

2
haha, gunakan ini dari javascript $ ('# checkbox'). attr ('checked', 'checked'); $ ('# checkbox'). klik ();
Senad Meškin

5
Anda harus menggunakan onchange sebagai gantinya, ini dirancang khusus untuk use case OP. (terima kasih ReeCube di bawah ini untuk tautannya) developer.mozilla.org/en-US/docs/Web/Events/change
Armando

90

Javascript murni:

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

Jika Anda menggunakan jQuery .. maka saya dapat menyarankan yang berikut: CATATAN: Saya membuat beberapa asumsi di sini

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

19

Gunakan acara onclick, karena setiap klik pada kotak centang benar-benar mengubahnya.


29
Bagaimana jika pengguna menggunakan keyboard?
thomthom

14
Ini strage, tetapi masih klik
SergeS

6
Memang klik berfungsi, itu bahkan dipecat ketika Anda menggunakan label untuk mengaktifkan kotak centang. Tetapi Anda harus lebih baik menggunakan acara 'perubahan'! Acara 'perubahan' dimaksudkan untuk ini: developer.mozilla.org/en-US/docs/Web/Events/change
ReeCube

Bagaimana dengan klik dua kali?
Chalky

4
Nah itu dua klik sekarang bukan?
Rohmer

13

Solusi berikut ini memanfaatkan jquery. Anggap Anda memiliki kotak centang dengan id of 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

Referensi kotak centang dengan id itu dan bukan dengan # Tetapkan fungsi ke atribut onclick daripada menggunakan atribut perubahan

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

Saya tahu sepertinya ini jawaban noob tapi saya letakkan di sini sehingga bisa membantu orang lain di masa depan.

Misalkan Anda sedang membangun tabel dengan loop foreach. Dan pada saat yang sama menambahkan kotak centang di akhir.

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

Anda menempatkan tombol di bawah tabel dengan input tersembunyi:

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

Anda dapat menulis skrip Anda seperti ini:

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

Id dari kotak centang Anda akan dikirimkan sebagai string "1,2" dalam variabel hasil. Anda kemudian dapat memecahnya pada level controller seperti yang Anda inginkan.


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

mencoba

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.