Eu tenho o seguinte:
<form id="myform">
<input type="checkbox" name="check1" value="check1">
<input type="checkbox" name="check2" value="check2">
</form>
Como uso o jQuery para capturar qualquer evento de verificação ocorrendo myform
e informar em qual caixa de seleção foi alternada (e saber se foi ativada ou desativada)?
this
já está definido como o elemento DOM da caixa de seleção, portantothis.checked
é suficiente. Você não precisará criar outro objeto jQuery para ele, a menos que planeje manipulá-lo.<label for='myInput'>Checkbox:</label><input id='myInput' name='myInput' type='checkbox'/>
) e clicar no rótulo, a caixa de seleção será marcada, mas essa função NÃO será chamada. Você deve usar o.change()
eventoUse o evento de mudança.
fonte
$("input[name=check1]").prop('checked', true)
. Veja jsfiddle.net/Z3E8V/2:checkbox
é uma extensão do jQuery e não faz parte da especificação CSS, as consultas que usam:checkbox
não podem tirar proveito do aumento de desempenho fornecido peloquerySelectorAll()
método DOM nativo . Para obter um melhor desempenho nos navegadores modernos, use[type="checkbox"]
".Existem várias respostas úteis, mas nenhuma parece cobrir todas as opções mais recentes . Para esse fim, todos os meus exemplos também atendem à presença de
label
elementos correspondentes e permitem adicionar dinamicamente caixas de seleção e ver os resultados em um painel lateral (redirecionandoconsole.log
).Escutar
click
eventos ativados nãocheckboxes
é uma boa ideia, pois isso não permitirá a alternância do teclado ou as alterações feitas no local em que um elemento correspondente foi clicado. Sempre ouça o evento.label
change
Use o
:checkbox
pseudo-seletor do jQuery , em vez deinput[type=checkbox]
.:checkbox
é mais curto e mais legível.Use
is()
com o:checked
pseudo-seletor do jQuery para testar se uma caixa de seleção está marcada. Isso garante que funcione em todos os navegadores.Manipulador de eventos básico anexado aos elementos existentes:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/
Notas:
:checkbox
seletor, que é preferível a usarinput[type=checkbox]
Manipulador de eventos delegados anexado ao elemento ancestral:
Os manipuladores de eventos delegados são projetados para situações em que os elementos ainda não podem existir (carregados ou criados dinamicamente) e são muito úteis. Eles delegam responsabilidade a um elemento ancestral (daí o termo).
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/
Notas:
change
) para formar bolhas até um elemento ancestral que não muda (nesse caso#myform
).':checkbox'
neste caso) apenas aos elementos na cadeia de bolhas .document
como padrão para conectar o manipulador de eventos delegados, se nada mais estiver mais próximo / conveniente.body
para anexar eventos delegados, pois ele possui um bug (relacionado ao estilo) que pode impedir a obtenção de eventos do mouse.O resultado dos manipuladores delegados é que os elementos correspondentes precisam existir apenas no momento do evento e não quando o manipulador de eventos foi registrado. Isso permite que o conteúdo adicionado dinamicamente gere os eventos.
P: É mais lento?
R: Enquanto os eventos estiverem na velocidade de interação do usuário, você não precisa se preocupar com a diferença insignificante de velocidade entre um manipulador de eventos delegado e um manipulador conectado diretamente. Os benefícios da delegação superam largamente qualquer desvantagem menor. Os manipuladores de eventos delegados são realmente mais rápidos para registrar , pois geralmente se conectam a um único elemento correspondente.
Por que não
prop('checked', true)
dispara ochange
evento?Isso é realmente por design. Se ele disparasse o evento, você facilmente entraria em uma situação de infinitas atualizações. Em vez disso, depois de alterar a propriedade marcada, envie um evento de mudança para o mesmo elemento usando
trigger
(nãotriggerHandler
):por exemplo, sem
trigger
nenhum evento ocorreJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
por exemplo, com
trigger
o evento normal de mudança é capturadoJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
Notas:
triggerHandler
como sugerido por um usuário, pois ele não fará bolhas de eventos para um manipulador de eventos delegados .JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/
embora irá trabalhar para um manipulador de eventos diretamente ligado ao elemento:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/
Referência: http://api.jquery.com/triggerhandler/
Se alguém tiver recursos adicionais que considerem não abrangidos por isso, sugira adições .
fonte
Usando o novo método 'on' no jQuery (1.7): http://api.jquery.com/on/
fonte
$("input[name=check1]").prop('checked', true)
. Veja jsfiddle.net/Z3E8V/2.triggerHandler('change');
após a.prop
chamada. Em seguida, alternará a caixa E chamará o evento.fonte
val()
não diz sechecked
étrue
.Reconhecendo o fato de que o solicitante solicitou especificamente o jQuery e de que a resposta selecionada está correta, deve-se notar que esse problema realmente não precisa do jQuery, por exemplo. Se alguém deseja resolver esse problema sem ele, pode simplesmente definir o
onClick
atributo das caixas de seleção nas quais deseja adicionar funcionalidades adicionais, como:HTML:
javascript:
Fiddle: http://jsfiddle.net/Y9f66/1/
fonte
Eu tentei o código da primeira resposta, ele não está funcionando, mas eu brinco e esse trabalho para mim
fonte