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.

bikey77
sumber
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();"/>
Senad Meškin
sumber
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" />

Vic
sumber
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();
    }
});
Liangliang Zheng
sumber
19

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

Sersan
sumber
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
    }
});
Eugene
sumber
4

HTML:

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

JS:

function handleChange(e) {
     const {checked} = e.target;
}
Ali Kleit
sumber
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
    }
};
Bart
sumber
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.

Bruce Tong
sumber
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()">

0x1ad2
sumber
0

mencoba

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

Kamil Kiełczewski
sumber