Ok, talvez não haja realmente nenhuma música sobre programação, mas existem muitas maneiras de abordar até mesmo os problemas mais simples quando você está programando. Este artigo discute apenas um: Verificar o estado de uma caixa de seleção HTML usando JavaScript.
Comecei a pensar sobre isso outro dia enquanto estava trabalhando em uma aplicação Rails que tinha algumas preferências para um modelo de usuário. Como havia apenas duas opções, e ambas eram valores booleanos, decidi usar AJAX para atualizar as preferências imediatamente após o usuário marcar uma das caixas. Dessa forma, não há necessidade de atualizar a página ou algo parecido.
O problema que encontrei foi usar JavaScript para verificar o estado da caixa de seleção. Quer dizer, não é algo complicado de se fazer. Mas existem tantas maneiras de fazer isso, quando você realmente começa a pensar sobre isso.
Por exemplo, usando jQuery, você pode verificar o valor do atributo “verificado”, assim:
$("#the_checkbox").attr("checked") === 'checked'
No entanto, em HTML, não importa qual valor está no atributo marcado, desde que tenha conteúdo. Então, realmente, verificar se o valor está ‘verificado’ nem sempre funciona. Quer dizer, deveria. Mas, como programador, não gosto de deixar as coisas ao acaso. Portanto, este seria um exemplo mais infalível:
typeof($("#the_checkbox").attr("checked")) !== 'undefined'
Mas espere! E se a caixa de seleção tiver um atributo marcado, mas estiver vazio, como este?
<input type="checkbox" checked>
Pessoalmente, não tenho ideia. Mas eu sei que no Chrome e no Firefox, esses navegadores pelo menos vêem isso como uma entrada marcada, e se você usar jQuery para verificar o valor do atributo “verificado”, ele diz que é igual a “verificado”, mesmo que esteja em fato vazio. Mas não sei como as quase centenas de variações de outros navegadores e versões (aqui estou olhando para você, IE!) Por aí veriam isso.
Ok, então esta postagem vai durar para sempre se eu listar todas as maneiras individuais de verificar o estado de uma caixa de seleção em JS e entrar em cada uma individualmente. Então, aqui está uma lista de apenas algumas maneiras que eu poderia pensar para fazer isso:
// First, find the checkbox using jQuery:
var checkbox = $("#the_checkbox");
// and then see if it's checked:
checkbox[0].checked
checkbox.prop("checked")
checkbox.attr("checked") === "checked"
typeof checkbox.attr("checked") !== "undefined"
checkbox.attr("checked")
checkbox.is(":checked")
$("#the_checkbox:checked").length
$("#the_checkbox:checked").length > 0
!!$("#the_checkbox:checked").length
// or, by accessing the DOM directly:
var checkbox = document.getElementById("the_checkbox"),
checked = checkbox.checked;
Portanto, a questão é, e eu já vi isso muito ser perguntado, qual é a melhor maneira de verificar o estado de uma caixa de seleção em JS? Existe realmente uma “melhor” maneira de fazer isso?
Diz-me tu.