jQuery ตรวจสอบว่าอินพุตเป็นช่องทำเครื่องหมายประเภทหรือไม่


151

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

$("#myinput").attr('checked') === undefined

ขอบคุณอีกครั้ง!

คำตอบ:


333

คุณสามารถใช้ตัวเลือกหลอก:checkboxกับการเรียกใช้isฟังก์ชันของ jQuery :

$('#myinput').is(':checkbox')

1
นี่เป็นวิธีที่ฉันใช้อยู่เสมอ
Topher Fangio

คุณไม่สามารถทำให้เรียบง่ายไปกว่านี้อีกแล้ว
KyleFarris

9
เหตุใดจึงต้องใช้เครื่องมือตัวเลือกสำหรับสิ่งนี้ มันไม่จำเป็นอย่างสมบูรณ์
Tim Down

7
@Tim Down ฉันจะชี้ให้เห็นว่าอาจจะมีวิธีที่มีประสิทธิภาพมากขึ้นเพื่อบรรลุสิ่งเดียวกัน ฉันคิดว่าฉันชอบรุ่นนี้เพราะรหัสสามารถอ่านได้มาก
Ken Browning

2
@ KenBrowning: ยุติธรรมพอ ฉันค่อนข้างต่อต้าน jQuery ในปี 2009 โดยเฉพาะอย่างยิ่งทัศนคติ SO ที่แพร่หลายของการสุ่มสี่สุ่มห้าใช้ jQuery สำหรับทุกสิ่ง; มุมมองของฉันมีความกลมกล่อมเล็กน้อยและฉันจะยกเลิก downvote ของฉันหากเป็นไปได้ อย่างไรก็ตามฉันยังคิดว่าฉันมีประเด็น ทางเลือก (ซึ่งฉันไม่สามารถปฏิเสธได้คือ verbose เพิ่มเติม):var myInput = $("myinput")[0]; var isCheckbox = myInput.nodeName.toLowerCase() == "input" && myInput.type == "checkbox";
Tim Down

22
>>> a=$("#communitymode")[0]
<input id="communitymode" type="checkbox" name="communitymode">
>>> a.type
"checkbox"

หรือสไตล์อื่น ๆ ของ jQuery:

$("#myinput").attr('type') == 'checkbox'

สมบูรณ์แบบ ไม่ใช่สิ่งที่ง่ายที่สุด
KyleFarris

6
มันช่วยประหยัดการใช้เอ็นจินตัวเลือกของ jQuery การใช้ที่นี่ไม่เหมาะสมอย่างสมบูรณ์ ตัวแปรแรกดีกว่าเนื่องจากหลีกเลี่ยงความสับสนของattr()ฟังก์ชันjQuery ที่ทำให้เกิดความสับสน
Tim Down

3
@Tim Down ถูกต้อง - คุณควรเปลี่ยนattr()เป็นprop()afaik attr()ไม่ได้รับค่าแอตทริบิวต์ "ของจริง" (เช่นการตรวจสอบหรือไม่) จากเบราว์เซอร์ สุจริตไม่แน่ใจว่าทำไมเป็นกรณีนี้ แต่ฉันได้เรียนรู้เรื่องนี้ในขณะที่กลับ
thekingoftruth

1
ใน Chome, ตัวอย่างที่สองของคุณเป็นกรณีที่สำคัญ: jsfiddle.net/gtza0uuL มันไม่ได้อยู่กับ .prop แต่ฉันไม่รู้ว่าสามารถรับประกันได้หรือไม่ หมายเหตุ: คุณไม่สามารถทำได้. toLowerCase () อย่างใดอย่างหนึ่งเนื่องจาก 'type' อาจไม่ได้กำหนดไว้
xr280xr


6

โซลูชันที่ไม่ใช่ jQuery นั้นเหมือนกับโซลูชัน jQuery:

document.querySelector('#myinput').getAttribute('type') === 'checkbox'

2

ใช้ฟังก์ชั่นนี้:

function is_checkbox(selector) {
    var $result = $(selector);
    return $result[0] && $result[0].type === 'checkbox';
};

หรือปลั๊กอิน jquery นี้:

$.fn.is_checkbox = function () { return this.is(':checkbox'); };

0
$('#myinput').is(':checkbox')

นี่เป็นเพียงการทำงานเพื่อแก้ไขปัญหาในการตรวจสอบว่ามีการทำเครื่องหมายในช่องทำเครื่องหมายหรือไม่ มันกลับจริงหรือเท็จฉันค้นหาชั่วโมงและลองทุกอย่างตอนนี้มันทำงานได้ชัดเจนฉันใช้ EDG เป็นเบราว์เซอร์และ W2UI


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