jQuery controlla se un input è una casella di controllo?


151

Vorrei scoprire se un input è una casella di controllo o meno e quanto segue non funziona:

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

Grazie ancora!

Risposte:


333

È possibile utilizzare lo pseudo-selettore :checkboxcon una chiamata alla isfunzione di jQuery :

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

1
Questo è il metodo che uso sempre.
Topher Fangio,

Non puoi davvero essere più semplice di così.
KyleFarris,

9
Perché usare il motore di selezione per questo? È completamente inutile.
Tim Down

7
@Tim Down Prendo in considerazione che potrebbero esserci modi più efficienti per ottenere lo stesso risultato. Suppongo che questa versione mi piaccia perché il codice è molto leggibile.
Ken Browning,

2
@KenBrowning: Abbastanza giusto. Ero abbastanza anti-jQuery nel 2009, in particolare l'atteggiamento SO prevalente dell'uso cieco di jQuery per tutto; le mie opinioni si sono ammorbidite un po 'da allora e annullerei il mio voto negativo se fosse possibile. Tuttavia, penso ancora di aver ragione. Alternativa (che non posso negare è più dettagliata):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"

Oppure, più dello stile di jQuery:

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

Perfettamente valido. Non il più semplice.
KyleFarris,

6
Salva utilizzando il motore di selezione di jQuery, il cui uso qui è del tutto inappropriato. La prima variante è molto migliore, poiché evita qualsiasi possibilità che la attr()funzione confusa di jQuery rovini qualcosa.
Tim Down

3
@ Tim Down è giusto - si dovrebbe cambiare attr()a prop(), per quanto ne so. attr()non ottiene sempre il valore dell'attributo "reale" (ovvero verificato o meno) dal browser. Onestamente non sono sicuro del perché questo sia il caso, ma l'ho imparato qualche tempo fa.
thekingoftruth il

1
In Chome, il tuo secondo esempio fa distinzione tra maiuscole e minuscole: jsfiddle.net/gtza0uuL . Non è con .prop, ma non so se possa essere garantito. Nota: non puoi semplicemente fare .toLowerCase () perché "type" potrebbe non essere definito.
xr280xr,

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

6

Una soluzione non jQuery è molto simile a una soluzione jQuery:

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

2

Usa questa funzione:

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

O questo plugin jquery:

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

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

questo è l'unico lavoro per risolvere il problema per rilevare se la casella di controllo è selezionata o meno. Restituisce vero o falso, lo cerco per ore e provo tutto, ora per funzionare è chiaro utilizzo EDG come browser e W2UI


Ricorda di utilizzare il rifrattore di codice quando incolli il codice nelle tue domande e risposte.
Andres Felipe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.