รับค่าของช่องทำเครื่องหมายที่เลือก?


177

ดังนั้นฉันมีรหัสที่มีลักษณะเช่นนี้:

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

ฉันแค่ต้องการจาวาสคริปต์เพื่อรับค่าของสิ่งที่ช่องทำเครื่องหมายที่มีการตรวจสอบในปัจจุบัน

แก้ไข : หากต้องการเพิ่มจะมีช่องทำเครื่องหมายเพียงช่องเดียวเท่านั้น


1
คุณต้องการรหัสจาวาสคริปต์หรือ jQuery?
Andrey Vorobyev

6
ทำไมไม่ใช้ปุ่มตัวเลือก
PraveenVenu

เพราะฉันเขียนปลั๊กอินสำหรับเว็บไซต์
มัทธิว 'บังคับ' ไบรอันท์

หากคุณต้องการช่องทำเครื่องหมายเพียงช่องเดียวทำไมคุณไม่ใช้ปุ่มตัวเลือก นี่เป็นองค์ประกอบ UI ที่เหมาะสมกว่าสำหรับงานนี้
Tal Yaron

@TalYaron คุณสามารถยกเลิกการเลือกปุ่มตัวเลือกได้หรือไม่? ฉันคิดว่าไม่มีรหัส js บางที OP ต้องการยกเลิกการเลือกกล่องอย่างง่ายดาย
R3tep

คำตอบ:


256

สำหรับเบราว์เซอร์สมัยใหม่ :

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

โดยใช้jQuery :

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

จาวาสคริปต์เพียวโดยไม่ต้อง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 เป็นวิธีที่ไม่ดีในการเพิ่ม id เดียวกันในองค์ประกอบหลายรายการ
วิศวกร

@ วิศวกรไม่เพียงแค่ใส่รหัสที่แตกต่างกันสำหรับแต่ละช่องทำเครื่องหมาย
กี

3
@ วิศวกร "บันทึกไบต์" เพราะเราต้องเขียนdocument.getElementById("foo").value();และ "บันทึกการคำนวณ" เพราะgetElementByIdแน่นอนว่าเร็วกว่าgetElementsByTagNameและวนซ้ำ
กี

9
สำหรับ jQuery .is(":checked")เป็นวิธีที่ถูกต้องตามที่.val()จะส่งคืนค่าแอ็ตทริบิวต์หากถูกกำหนด .. และแม้ว่าจะไม่ได้กำหนดไว้มันจะส่งคืน "on" และไม่ใช่ค่าบูลีน .. jsfiddle.net/d5f7wnzu
Peter

1
document.querySelector('.messageCheckbox:checked').valueสร้าง TypeError หากไม่มีการทำเครื่องหมายในช่องทำเครื่องหมาย
Meisner

262

ข้อสังเกตข้างต้นไม่ได้ผลสำหรับฉัน แต่ใช้สิ่งนี้:

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

การเข้ารหัสที่มีความสุข


ฉันเห็นด้วย คุณยืนยันสิ่งที่ฉันคิด ฉันชอบที่จะใส่ var chk1 = document.getElementById ('messageCheckbox'); ด้วยวิธีนี้ฉันสามารถอ้างอิงคุณสมบัติของตัวแปร "chk1": ทำเครื่องหมายเปิดใช้งานรูปแบบและอื่น ๆ
JustJohn

4
คุณได้รับมาจากidไหน คุณช่วยอธิบายได้มั้ย คนที่ถามคำถามที่ใช้classในการป้อนข้อมูลจริง มันจะดีถ้าคุณสามารถให้รหัสเต็มดังนั้นฉันสามารถเข้าใจจากที่ที่คุณได้รับid
devfaysal

3
สิ่งนี้ใช้ไม่ได้กับโค้ดตัวอย่างที่ให้โดย OP ... ฉันอยากรู้ว่าทำไมมันมี upvotes มากมายในขณะที่ไม่ตอบคำถามแม้ว่าการแก้ไขด่วนอาจทำให้ถูกต้อง
Laurent S.

1
คุณสามารถแก้ไขคำตอบที่เสนอเพื่อขยายสิ่งนี้ทำอะไรได้บ้างและตอบคำถามกับ OP อย่างไร
Ro Yo Mi

2
@PradeepKumarPrabaharan อาจจะเป็นคนอย่างฉัน (ไม่ได้ใช้ ID สำหรับหลายรายการ) สงสัยว่าทำไม. value จึงทำให้พวกเขาไม่ได้กำหนด

111

ฉันใช้สิ่งนี้ในรหัสของฉันลองสิ่งนี้

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

หากช่องทำเครื่องหมายถูกทำเครื่องหมายxจะเป็นจริงมิฉะนั้นจะเป็นเท็จ


7
สิ่งนี้ไม่ตอบคำถาม แต่สามารถใช้เพื่อตรวจสอบว่ามีการทำเครื่องหมายในช่องหรือไม่ +1 เนื่องจากมันยังช่วยฉันได้
Kevin Jurkowski

5
ไม่ตอบคำถาม แต่เป็นสิ่งที่ฉันกำลังมองหา
phn

มีประโยชน์เมื่อเป็นตัวแปรเช่น#checkbox myCheckbox
Optimae

15

ในจาวาสคริปต์ธรรมดา:

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

สิ่งนี้ไม่ได้ตอบคำถามโดยตรง แต่อาจช่วยผู้เข้าชมในอนาคต


หากคุณต้องการให้ตัวแปรเป็นสถานะปัจจุบันของช่องทำเครื่องหมาย (แทนที่จะต้องทำการตรวจสอบสถานะของมันเสมอ) คุณสามารถแก้ไขonchangeเหตุการณ์เพื่อตั้งค่าตัวแปรนั้นได้

สามารถทำได้ใน HTML:

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

หรือด้วย JavaScript:

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

2

ใช้สิ่งนี้:

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

สิ่งนี้จะถือว่าช่องทำเครื่องหมายเพื่อตรวจสอบมีคลาส "messageCheckbox" มิฉะนั้นคุณจะต้องทำการตรวจสอบว่าอินพุตเป็นประเภทช่องทำเครื่องหมาย ฯลฯ




0

ไม่มีข้อใดถูกใช้งานได้สำหรับฉันโดยไม่ทิ้งข้อผิดพลาดในคอนโซลเมื่อไม่มีการทำเครื่องหมายในกล่องดังนั้นฉันจึงทำบางสิ่งตามบรรทัดเหล่านี้แทน (onclick และฟังก์ชั่นช่องทำเครื่องหมายถูกใช้เพื่อวัตถุประสงค์ในการสาธิตเท่านั้น ฟังก์ชั่นการส่งแบบฟอร์มที่ใหญ่กว่า):

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

ในโครงการของฉันฉันมักจะใช้ตัวอย่างนี้:

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

และมันทำงานได้ดี ด้วยความเคารพ


วิธีที่ไม่มีประสิทธิภาพอย่างยิ่งในการทำเช่นนั้น
AStopher
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.