jQuery memeriksa apakah inputnya adalah ketik kotak centang?

151

Saya ingin mengetahui apakah input adalah kotak centang atau tidak, dan yang berikut ini tidak berfungsi:

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

Terima kasih sekali lagi!

Rio
sumber

Jawaban:

333

Anda dapat menggunakan pemilih-semu :checkboxdengan panggilan ke isfungsi jQuery :

$('#myinput').is(':checkbox')
Ken Browning
sumber
1
Ini adalah metode yang selalu saya gunakan.
Topher Fangio
Anda benar-benar tidak bisa mendapatkan yang lebih sederhana dari itu.
KyleFarris
9
Mengapa menggunakan mesin pemilih untuk ini? Sama sekali tidak perlu.
Tim Down
7
@Tim Down Saya berpendapat bahwa mungkin ada cara yang lebih efisien untuk mencapai hal yang sama. Saya kira saya suka versi ini karena kodenya sangat mudah dibaca.
Ken Browning
2
@ KenBrowning: Cukup adil. Saya cukup anti-jQuery pada tahun 2009, khususnya sikap SO lazim menggunakan jQuery untuk semuanya; pandangan saya sedikit melunak sejak itu dan saya akan membatalkan downvote saya jika mungkin. Namun, saya masih berpikir saya ada benarnya. Alternatif (yang tidak dapat saya tolak adalah lebih bertele-tele):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"

Atau, lebih banyak gaya jQuery:

$("#myinput").attr('type') == 'checkbox'
Esteban Küber
sumber
Sangat valid. Bukan yang paling sederhana.
KyleFarris
6
Menghemat menggunakan mesin pemilih jQuery, penggunaannya di sini benar-benar tidak pantas. Varian pertama jauh lebih baik, karena menghindari kemungkinan attr()fungsi jQuery yang membingungkan mengacaukan segalanya.
Tim Down
3
@Tim Down tepat - Anda harus beralih attr()ke prop(), afaik. attr()tidak selalu mendapatkan nilai atribut "nyata" (yaitu dicentang atau tidak) dari browser. Jujur tidak yakin mengapa ini terjadi, tapi saya belajar ini beberapa waktu lalu.
thekingoftruth
1
Di Chome, contoh kedua Anda peka huruf besar-kecil: jsfiddle.net/gtza0uuL . Ini bukan dengan .prop, tapi saya tidak tahu apakah itu bisa dijamin. Catatan: Anda tidak bisa melakukan .toLowerCase () karena 'tipe' mungkin tidak terdefinisi.
xr280xr
10
$("#myinput").attr('type') == 'checkbox'
kekacauan
sumber
6

Solusi non-jQuery sangat mirip dengan solusi jQuery:

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

Gunakan fungsi ini:

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

Atau plugin jquery ini:

$.fn.is_checkbox = function () { return this.is(':checkbox'); };
Anatoliy
sumber
0
$('#myinput').is(':checkbox')

ini adalah satu-satunya pekerjaan, untuk menyelesaikan masalah untuk mendeteksi apakah kotak centang dicentang atau tidak. Ini mengembalikan benar atau salah, saya mencari berjam-jam dan mencoba semuanya, sekarang pekerjaannya menjadi jelas saya menggunakan EDG sebagai browser dan W2UI

Kode
sumber
Ingat gunakan refactor kode ketika Anda menempelkan kode dalam pertanyaan dan jawaban Anda.
Andres Felipe