Dapatkan nilai kotak centang yang dicentang?

177

Jadi saya punya kode yang terlihat seperti ini:

<input class="messageCheckbox" type="checkbox" value="3" name="mailId[]">
<input class="messageCheckbox" type="checkbox" value="1" name="mailId[]">

Saya hanya perlu Javascript untuk mendapatkan nilai dari kotak centang apa pun yang saat ini diperiksa.

EDIT : Untuk menambahkan, hanya akan ada SATU kotak centang.

Matius 'wajib' Bryant
sumber
1
Anda membutuhkan kode javascript atau jQuery?
Andrey Vorobyev
6
Mengapa tidak menggunakan tombol radio?
PraveenVenu
Karena saya sedang menulis sebuah plugin untuk sebuah situs
Matthew 'wajib' Bryant
Jika Anda hanya perlu satu kotak centang, mengapa Anda tidak menggunakan tombol radio? ini adalah komponen UI yang lebih cocok untuk pekerjaan ini.
Tal Yaron
@TalYaron Bisakah Anda membatalkan pilihan tombol radio? Saya pikir tidak tanpa kode js. Mungkin OP ingin membatalkan pilihan kotak dengan mudah.
R3tep

Jawaban:

256

Untuk browser modern :

var checkedValue = document.querySelector('.messageCheckbox:checked').value;

Dengan menggunakanjQuery :

var checkedValue = $('.messageCheckbox:checked').val();

Javascript murni tanpajQuery :

var checkedValue = null; 
var inputElements = document.getElementsByClassName('messageCheckbox');
for(var i=0; inputElements[i]; ++i){
      if(inputElements[i].checked){
           checkedValue = inputElements[i].value;
           break;
      }
}
Insinyur
sumber
9
@Mageek adalah praktik buruk untuk menambahkan id yang sama pada banyak elemen.
Insinyur
@ Engineer Tidak, hanya memasukkan id berbeda untuk setiap kotak centang.
Mageek
3
@ Engineer "Menyimpan byte" karena kita harus menulis document.getElementById("foo").value();dan "menyimpan perhitungan" karena getElementByIdpasti lebih cepat daripada getElementsByTagNamedan satu lingkaran.
Mageek
9
untuk jQuery .is(":checked")adalah cara yang benar karena .val()akan mengembalikan nilai atribut jika ditentukan .. dan bahkan jika tidak didefinisikan akan mengembalikan "pada" dan bukan nilai boolean .. jsfiddle.net/d5f7wnzu
Peter
1
document.querySelector('.messageCheckbox:checked').valuemenghasilkan TypeError jika tidak ada kotak centang dicentang
Meisner
262

Tidak satu pun di atas bekerja untuk saya tetapi cukup gunakan ini:

document.querySelector('.messageCheckbox').checked;

Selamat coding.

JanBorup
sumber
Saya setuju. Anda mengkonfirmasi apa yang saya pikirkan. Saya suka meletakkan var chk1 = document.getElementById ('messageCheckbox'); Dengan begitu saya bisa mereferensikan properti variabel "chk1": dicentang, diaktifkan, gaya, dll.
JustJohn
4
Di mana Anda mendapatkan itu id? Bisakah Anda jelaskan? Orang yang mengajukan pertanyaan menggunakan classinput sebenarnya. Akan lebih baik jika Anda dapat memberikan kode lengkap sehingga saya bisa mengerti dari mana Anda mendapatkannyaid
devfaysal
3
Ini tidak dapat bekerja dengan kode contoh yang disediakan oleh OP ... Saya ingin tahu mengapa ada begitu banyak upvotes sementara tidak menjawab pertanyaan, meskipun perbaikan cepat mungkin membuatnya benar.
Laurent S.
1
Bisakah Anda mengedit jawaban yang Anda usulkan untuk memperluas apa yang dilakukan dan bagaimana alamat OP?
Ro Yo Mi
2
@PradeepKumarPrabaharan mungkin orang-orang seperti saya (tidak menggunakan id untuk beberapa item) bertanya-tanya mengapa .value memberi mereka undefinied.
111

Saya menggunakan ini dalam kode saya. Coba ini

var x=$("#checkbox").is(":checked");

Jika kotak centang dicentang xakan benar jika tidak maka akan salah.

pengguna1683014
sumber
7
Ini tidak menjawab pertanyaan, tetapi dapat digunakan untuk menentukan apakah kotak centang dicentang atau tidak. +1 karena masih membantu saya keluar.
Kevin Jurkowski
5
Tidak menjawab pertanyaan tetapi persis apa yang saya cari.
phn
Berguna kapan #checkboxvariabel, misalnya myCheckbox.
Optimae
15

dalam javascript biasa:

function test() {
    var cboxes = document.getElementsByName('mailId[]');
    var len = cboxes.length;
    for (var i=0; i<len; i++) {
        alert(i + (cboxes[i].checked?' checked ':' unchecked ') + cboxes[i].value);
    }
}
function selectOnlyOne(current_clicked) {
    var cboxes = document.getElementsByName('mailId[]');
    var len = cboxes.length;
    for (var i=0; i<len; i++) {
        cboxes[i].checked = (cboxes[i] == current);
    }
}
Stano
sumber
4

$(document).ready(function() {
  var ckbox = $("input[name='ips']");
  var chkId = '';
  $('input').on('click', function() {
    
    if (ckbox.is(':checked')) {
      $("input[name='ips']:checked").each ( function() {
   			chkId = $(this).val() + ",";
        chkId = chkId.slice(0, -1);
 	  });
       
       alert ( $(this).val() ); // return all values of checkboxes checked
       alert(chkId); // return value of checkbox checked
    }     
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type="checkbox" name="ips" value="12520">
<input type="checkbox" name="ips" value="12521">
<input type="checkbox" name="ips" value="12522">

Marinha do Nascimento
sumber
4

Ini tidak langsung menjawab pertanyaan, tetapi dapat membantu pengunjung masa depan.


Jika Anda ingin agar variabel selalu menjadi kondisi saat ini dari kotak centang (daripada harus terus memeriksa keadaannya), Anda dapat memodifikasi onchangeacara untuk mengatur variabel itu.

Ini dapat dilakukan dalam HTML:

<input class='messageCheckbox' type='checkbox' onchange='some_var=this.checked;'>

atau dengan JavaScript:

cb = document.getElementsByClassName('messageCheckbox')[0]
cb.addEventListener('change', function(){some_var = this.checked})
Joe Iddon
sumber
2

Gunakan ini:

alert($(".messageCheckbox").is(":checked").val())

Ini mengasumsikan kotak centang untuk memeriksa memiliki kelas "messageCheckbox", jika tidak, Anda harus melakukan pemeriksaan jika inputnya adalah jenis kotak centang, dll.

jackJoe
sumber
2
<input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="3" name="mailId[]">

<input class="messageCheckbox" type="checkbox" onchange="getValue(this.value)" value="1" name="mailId[]">
function getValue(value){
    alert(value);
}
Asing
sumber
0

Jika Anda menggunakan Semantic UI React , dataditeruskan sebagai parameter kedua ke onChangeacara tersebut.

Karena itu Anda dapat mengakses checkedproperti sebagai berikut:

<Checkbox label="Conference" onChange={(e, d) => console.log(d.checked)} />
Dave Clark
sumber
0

Tidak satu pun di atas bekerja untuk saya tanpa melemparkan kesalahan di konsol ketika kotak tidak dicentang jadi saya melakukan sesuatu di sepanjang baris ini sebagai gantinya (hanya klik dan fungsi kotak centang hanya digunakan untuk tujuan demo, dalam kasus penggunaan saya itu adalah bagian dari fungsi pengiriman formulir jauh lebih besar):

function checkbox() {
  var checked = false;
  if (document.querySelector('#opt1:checked')) {
     checked = true;
  }
  document.getElementById('msg').innerText = checked;
}
<input type="checkbox" onclick="checkbox()" id="opt1"> <span id="msg">Click The Box</span>

membumbui
sumber
-3

Dalam proyek saya, saya biasanya menggunakan cuplikan ini:

var type[];
$("input[name='messageCheckbox']:checked").each(function (i) {
                type[i] = $(this).val();
            });

Dan itu bekerja dengan baik. Salam.

VanThaoNguyen
sumber
Cara yang sangat tidak efisien untuk melakukan itu.
AStopher