Quero que um evento seja acionado do lado do cliente quando uma caixa de seleção estiver marcada / desmarcada:
$('.checkbox').click(function() {
if ($(this).is(':checked')) {
// Do stuff
}
});
Basicamente, quero que isso aconteça em todas as caixas de seleção da página. Esse método de acionar o clique e verificar o estado está ok?
Eu estou pensando que deve haver uma maneira jQuery mais limpa. Alguém conhece uma solução?
javascript
jquery
event-handling
AnonyMouse
fonte
fonte
Respostas:
Vincule ao
change
evento em vez declick
. No entanto, você provavelmente ainda precisará verificar se a caixa de seleção está marcada ou não:O principal benefício da ligação aoEditado em comentárioschange
evento sobre oclick
evento é que nem todos os cliques em uma caixa de seleção farão com que ele mude de estado. Se você deseja capturar apenas eventos que fazem com que a caixa de seleção mude de estado, deseja ochange
evento com o nome apropriado .Observe também que eu usei, em
this.checked
vez de agrupar o elemento em um objeto jQuery e usar métodos jQuery, simplesmente porque é mais curto e rápido acessar a propriedade do elemento DOM diretamente.Editar (ver comentários)
Para obter todas as caixas de seleção, você tem algumas opções. Você pode usar o
:checkbox
pseudo-seletor:Ou você pode usar um atributo igual ao seletor:
fonte
$(this).is(':checked')
. Eu pensei que você tinha que usar ochange
evento para detectar alterações no teclado (tabulação, espaço), mas, surpreendentemente,click
também detecta alterações que não são obtidas com um clique do mouse, não tenho certeza se é algo do jQuery, jsfiddle.net / mendesjuan / E39szclick
,change
ou qualquer que seja a todas as caixas de seleção na página podem causar problemas de desempenho (depepending sobre a quantidade de caixas de seleção). Tente ligação ao elemento pai ou o documento e capturando a ie evento borbulhava$('form').on('change', ':checkbox', function(){ //stuff });
Para referência futura a qualquer pessoa aqui com dificuldade, se você estiver adicionando as caixas de seleção dinamicamente, a resposta correta aceita acima não funcionará. Você precisará aproveitar a delegação de eventos, que permite que um nó pai capture eventos com bolhas de um descendente específico e emita um retorno de chamada.
Observe que quase sempre é desnecessário usar
document
o seletor principal. Em vez disso, escolha um nó pai mais específico para impedir a propagação do evento em muitos níveis.O exemplo abaixo mostra como os eventos de nós de domínio adicionados dinamicamente não acionam ouvintes definidos anteriormente.
Enquanto este exemplo exibe o uso da delegação de eventos para capturar eventos para um nó específico (
h1
neste caso) e emitir um retorno de chamada para esses eventos.fonte
Apenas outra solução
fonte
Se sua intenção é anexar um evento apenas às caixas de seleção marcadas (para que seja acionado quando elas forem desmarcadas e marcadas mais tarde novamente), é isso que você deseja.
se sua intenção é anexar evento a todas as caixas de seleção (marcadas e desmarcadas)
se você deseja que ele seja acionado somente quando eles estão sendo verificados (de não marcado), @James Allardice responde acima.
BTW
input[type='checkbox']:checked
é um seletor de CSS.fonte
$("input[type='checkbox']:not(:checked)")
fonte
fonte
talvez isso possa ser uma alternativa para você.
fonte
Esta é a solução a encontrar, se a caixa de seleção está marcada ou não. Use a função #prop () //
fonte
Experimente esta validação jQuery
fonte
É muito simples, é assim que eu uso:
JQuery:
Saudações!
fonte