$(document).ready(function() {
//set initial state.
$('#textbox1').val($(this).is(':checked'));
$('#checkbox1').change(function() {
$('#textbox1').val($(this).is(':checked'));
});
$('#checkbox1').click(function() {
if (!$(this).is(':checked')) {
return confirm("Are you sure?");
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="checkbox1"/><br />
<input type="text" id="textbox1"/>
Aqui .change()
atualiza o valor da caixa de texto com o status da caixa de seleção. Eu uso .click()
para confirmar a ação ao desmarcar. Se o usuário selecionar cancelar, a marca de seleção é restaurada, mas é .change()
acionada antes da confirmação.
Isso deixa as coisas em um estado inconsistente e a caixa de texto diz false quando a caixa de seleção está marcada.
Como posso lidar com o cancelamento e manter o valor da caixa de texto consistente com o estado da verificação?
javascript
jquery
event-handling
Professor Chaos
fonte
fonte
Respostas:
Testado no JSFiddle e faz o que você está solicitando. Essa abordagem tem o benefício adicional de acionar quando um rótulo associado a uma caixa de seleção é clicado.
Resposta atualizada:
Resposta original:
fonte
this.checked
em vez de$(this).is(':checked')
: jsperf.com/prop-vs-ischecked/5this.checked
é muito mais curto escrever + javascript nativo, pode valer a pena usar em geral (além de ser ~ 200 a 300 vezes mais rápido).Demo
Usar
mousedown
fonte
A maioria das respostas não será exibida (presumivelmente) se você usar
<label for="cbId">cb name</label>
. Isso significa que quando você clica no rótulo, ele marca a caixa em vez de clicar diretamente na caixa de seleção. (Não é exatamente a pergunta, mas vários resultados de pesquisa tendem a aparecer aqui)Nesse caso, você pode usar:
Earlier versions of jQuery:
Exemplo do JSFiddle com o jQuery 1.6.4
jQuery 1.7+
Exemplo JSFiddle com o jQuery 2.x mais recente
fonte
Bem ... apenas para salvar uma dor de cabeça (já passou da meia-noite aqui), eu poderia pensar em:
Espero que ajude
fonte
Para mim, isso funciona muito bem:
fonte
Olha Você aqui
Html
Javascript
fonte
Livre-se do evento de alteração e, em vez disso, altere o valor da caixa de texto no evento de clique. Em vez de retornar o resultado da confirmação, pegue-o em uma var. Se for verdade, altere o valor. Então retorne o var.
fonte
Clique na caixa de seleção e verifique se o valor no mesmo loop de eventos é o problema.
Tente o seguinte:
Demo: http://jsfiddle.net/mrchief/JsUWv/6/
fonte
se você estiver usando o iCheck Jquery, use o código abaixo
fonte
Tente isto
fonte
fonte
fonte
fonte
Resposta tardia, mas você também pode usar
on("change")
fonte
basta usar o evento click, meu ID da caixa de seleção é CheckAll
fonte
obter valor do rádio por nome
fonte
Não sei por que todo mundo está fazendo isso tão complicado. Foi tudo o que fiz.
fonte
fonte