ตรวจสอบว่าไม่ได้เลือกช่องทำเครื่องหมายเมื่อคลิก - jQuery


87

ฉันต้องการตรวจสอบว่าช่องทำเครื่องหมายถูกยกเลิกการเลือกหรือไม่เมื่อผู้ใช้คลิกที่ช่องนั้น สาเหตุนี้เป็นเพราะฉันต้องการทำการตรวจสอบความถูกต้องเมื่อผู้ใช้ยกเลิกการเลือกช่องทำเครื่องหมาย เนื่องจากต้องเลือกช่องทำเครื่องหมายอย่างน้อยหนึ่งช่อง ดังนั้นหากเขายกเลิกการเลือกรายการสุดท้ายระบบจะตรวจสอบตัวเองอีกครั้งโดยอัตโนมัติ

ด้วย jQuery ฉันสามารถค้นหาได้อย่างง่ายดายว่ามีการตรวจสอบหรือไม่:

$('#check1').click(function() {
    if($(this).is(':checked'))
        alert('checked');
    else
        alert('unchecked');
});

แต่จริงๆแล้วฉันต้องการเพียงคำสั่ง if ที่ตรวจสอบว่าช่องทำเครื่องหมายไม่ถูกเลือกหรือไม่

ดังนั้นฉันคิดว่าฉันสามารถทำได้ด้วยรหัสต่อไปนี้:

$('#check2').click(function() {
    if($(this).not(':checked'))
        alert('unchecked');
    else
        alert('checked');
});

แต่จะแสดงข้อความ "ไม่เลือก" เสมอ ไม่ใช่สิ่งที่ฉันคาดหวังจริงๆ ...

การสาธิต: http://jsfiddle.net/tVM5H/

ในที่สุดฉันก็ต้องการบางสิ่งเช่น:

$('#check2').click(function() {
    if($(this).not(':checked')) {
        // Got unchecked, so something!!!
    }
});

แต่เห็นได้ชัดว่าสิ่งนี้ไม่ได้ผล ฉันไม่ต้องการใช้ตัวอย่างแรกเพราะฉันมีคำสั่ง 'else' ที่ไม่จำเป็นเมื่อฉันต้องการคำสั่ง 'if' เพียงคำสั่งเดียว

อย่างแรกนี่เป็นบั๊ก jQuery หรือไม่? เพราะฉันเป็นพฤติกรรมที่ไม่คาดคิด และประการที่สองมีใครเป็นตัวแทนสำหรับทางเลือกที่ดี?

คำตอบ:



51

คำตอบที่โพสต์แล้วจะใช้ได้ หากคุณต้องการใช้ jQuery: คุณไม่สามารถทำได้:

if ($(this).is(':not(:checked)'))

หรือ

if ($(this).attr('checked') == false)

ตัวอย่างแรกในคำตอบนี้ดูเหมือนง่ายที่สุดในการอ่านตัวเลือกทั้งหมดดังนั้นฉันจึงโหวตให้
Toby 1 Kenobi


4

jQuery เพื่อตรวจสอบการตรวจสอบ? จริงๆ?

if(!this.checked) {

อย่าใช้รถถังในการทำมีดโกน


4
หากใช้ jQuery เพื่อค้นหาองค์ประกอบควรอ่าน$(this)[0].checked
คริส

@HoldOffHunger เป็นส่วนหนึ่งขององค์ประกอบอินพุตดั้งเดิม: developer.mozilla.org/en-US/docs/Web/HTML/Element/input/… หากคุณใช้ jQuery Chris จะมีไวยากรณ์ที่ถูกต้องในความคิดเห็นด้านบนของคุณ
TheZ

@TheZ: ดี! ใช่คุณพูดถูกคริสตอบว่าดี คำแนะนำ: เพิ่มเพื่อตอบพร้อมเครดิต? ทั้ง OP และคำตอบด้านบนจะขึ้นอยู่กับ $ (ตัวเลือก) .is ('... ใช้เฉพาะ.checkedที่ที่พวกเขามี.is('checked')จะไม่ทำงานด้วยตัวเอง
HoldOffHunger


2

ลองดูคำตอบบางส่วนสำหรับคำถามนี้ - ฉันคิดว่าอาจใช้ได้กับคุณ:

วิธีเรียกใช้ฟังก์ชันคลิกหลังจากพฤติกรรมเริ่มต้นขององค์ประกอบ

ฉันคิดว่าคุณกำลังประสบความไม่สอดคล้องกันในการใช้งานonclickฟังก์ชันของเบราว์เซอร์ บางคนเลือกที่จะสลับช่องทำเครื่องหมายก่อนที่กิจกรรมจะเริ่มและบางส่วนหลังจากนั้น


นี่เป็นสิ่งที่สำคัญมากเช่นกัน
TheZ

และนั่นคือเหตุผลที่ jQuery ตรวจสอบการตรวจสอบ จริงๆ. ;)
JoeBrockhaus

1

คำตอบถูกโพสต์แล้ว แต่เราสามารถใช้ jquery ในลักษณะนี้ได้เช่นกัน

การสาธิต

$(function(){
    $('#check1').click(function() {
        if($('#check1').attr('checked'))
            alert('checked');
        else
            alert('unchecked');
    });

    $('#check2').click(function() {
        if(!$('#check2').attr('checked'))
            alert('unchecked');
        else
            alert('checked');
    });
});

0

ทำแบบนี้

if (typeof $(this).attr("checked") == "undefined" )

// To check if checkbox is checked
if( $(this).attr("checked")=="checked")

นี่อาจเป็นthis.checkedได้ บรรทัดแรกไม่จำเป็นต้องtypeofมี (จะไม่เพิ่ม a ReferencError) คุณควรใช้prop()แทนattr()ซึ่งจะส่งคืนบูลีนทำให้อันที่สองของคุณซ้ำซ้อนเช่นกัน
alex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.