Lấy giá trị của hộp kiểm tra?


177

Vì vậy, tôi đã có mã trông như thế này:

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

Tôi chỉ cần Javascript để có được giá trị của bất kỳ hộp kiểm nào hiện đang được kiểm tra.

EDIT : Để thêm, sẽ chỉ có MỘT hộp kiểm tra.


1
Bạn cần mã javascript hoặc jQuery?
Andrey Vorobyev

6
Tại sao không sử dụng nút radio?
PraveenVothy

Bởi vì tôi đang viết một plugin cho một trang web
Matthew 'bắt buộc' Bryant

Nếu bạn chỉ cần một hộp kiểm, tại sao bạn không sử dụng các nút radio? đây là thành phần UI phù hợp hơn cho công việc này.
Tal Yaron

@TalYaron Bạn có thể bỏ chọn nút radio không? Tôi nghĩ không phải không có mã js. Có lẽ OP muốn bỏ chọn hộp dễ dàng.
R3tep

Câu trả lời:


256

Đối với các trình duyệt hiện đại :

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

Bằng cách sử dụngjQuery :

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

Javascript thuần túy không cójQuery :

var checkedValue = null; 
var inputElements = document.getElementsByClassName('messageCheckbox');
for(var i=0; inputElements[i]; ++i){
      if(inputElements[i].checked){
           checkedValue = inputElements[i].value;
           break;
      }
}

9
@Mageek thực tế không tốt khi thêm cùng một id trên nhiều yếu tố.
Kỹ sư

@Engineer Không, chỉ cần đặt một id khác nhau cho mỗi hộp kiểm.
Mageek

3
@Engineer "Lưu byte" vì chúng ta chỉ cần viết document.getElementById("foo").value();và "lưu các phép tính" bởi vì getElementByIdnó chắc chắn nhanh hơn getElementsByTagNamevà một vòng lặp.
Mageek

9
đối với jQuery .is(":checked")là cách chính xác vì .val()sẽ trả về giá trị thuộc tính nếu được xác định .. và ngay cả khi không được xác định, nó sẽ trả về "bật" và không phải là giá trị boolean .. jsfiddle.net/d5f7wnzu
Peter

1
document.querySelector('.messageCheckbox:checked').valuetạo TypeError nếu không có hộp kiểm nào được chọn
Meisner

262

Không có cái nào ở trên làm việc cho tôi mà chỉ đơn giản là sử dụng cái này:

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

Chúc mừng mã hóa.


Tôi đồng tình. Bạn đã xác nhận những gì tôi nghĩ. Tôi thích đặt var chk1 = document.getEuityById ('messageCheckbox'); Bằng cách đó, tôi có thể tham chiếu các thuộc tính của biến "chk1": đã chọn, đã bật, kiểu, v.v.
JustJohn

4
Bạn đã lấy nó ở idđâu? Bạn có thể giải thích dùm không? Người hỏi câu hỏi được sử dụng classtrong đầu vào thực sự. Sẽ tốt hơn nếu bạn có thể cung cấp mã đầy đủ để tôi có thể hiểu từ nơi bạn cóid
devfaysal

3
Điều này không thể hoạt động với mã ví dụ do OP cung cấp ... Tôi tò mò tại sao nó lại có quá nhiều câu trả lời trong khi không trả lời câu hỏi, mặc dù cách khắc phục nhanh có thể khiến nó đúng.
Laurent S.

1
Bạn có thể chỉnh sửa câu trả lời được đề xuất của mình để mở rộng về những gì nó làm và cách giải quyết OP không?
Ro Yo Mi

2
@PradeepKumarPrabaharan có lẽ những người như tôi (không sử dụng id cho nhiều mục) tự hỏi tại sao .value lại cho họ không xác định.

111

Tôi đang sử dụng mã này trong mã của mình. Hãy thử điều này

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

Nếu hộp kiểm được chọn xsẽ đúng nếu không nó sẽ sai.


7
Điều này không trả lời câu hỏi, nhưng có thể được sử dụng để xác định xem hộp kiểm có được chọn hay không. +1 vì nó vẫn giúp tôi ra ngoài.
Kevin Jurkowski

5
Không trả lời câu hỏi nhưng chính xác là những gì tôi đang tìm kiếm.
phn

Hữu ích khi #checkboxlà một biến, ví dụ myCheckbox.
Optimae

15

trong javascript đơn giản:

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);
    }
}

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


4

Điều này không trực tiếp trả lời câu hỏi, nhưng có thể giúp khách truy cập trong tương lai.


Nếu bạn muốn có một biến luôn là trạng thái hiện tại của hộp kiểm (thay vì phải tiếp tục kiểm tra trạng thái của nó), bạn có thể sửa đổi onchangesự kiện để đặt biến đó.

Điều này có thể được thực hiện trong HTML:

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

hoặc với JavaScript:

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

2

Dùng cái này:

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

Điều này giả sử các hộp kiểm để kiểm tra có lớp "messageCheckbox", nếu không, bạn sẽ phải thực hiện kiểm tra nếu đầu vào là loại hộp kiểm, v.v.


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);
}

0

Nếu bạn đang sử dụng Semantic UI React , datađược chuyển làm tham số thứ hai cho onChangesự kiện.

Do đó, bạn có thể truy cập vào checkedtài sản như sau:

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

0

Không có cách nào ở trên hoạt động với tôi mà không gây ra lỗi trong bảng điều khiển khi hộp không được kiểm tra nên tôi đã làm gì đó dọc theo các dòng này (onclick và chức năng hộp kiểm chỉ được sử dụng cho mục đích demo, trong trường hợp sử dụng của tôi, đó là một phần của chức năng đệ trình biểu mẫu lớn hơn nhiều):

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>


-3

Trong dự án của tôi, tôi thường sử dụng đoạn trích này:

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

Và nó hoạt động tốt. Trân trọng.


Một cách cực kỳ không hiệu quả để làm điều đó.
AStopher
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.