Eu gostaria de criar uma opção em um formulário como
[] I would like to order a [selectbox with pizza] pizza
onde a caixa de seleção está ativada apenas quando a caixa de seleção está marcada e desativada quando não está marcada.
Eu venho com este código:
<form>
<input type="checkbox" id="pizza" name="pizza" value="yes"> <label for="pizza">
I would like to order a</label>
<select name="pizza_kind">
<option>(choose one)</option>
<option value="margaritha">Margaritha</option>
<option value="hawai">Hawai</option>
</select>
pizza.
</form>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js">
</script>
<script>
var update_pizza = function () {
if ($("#pizza").is(":checked")) {
$("#pizza_kind").removeAttr("disabled");
}
else {
$("#pizza_kind").prop('disabled', 'disabled');
}
};
$(update_pizza);
$("#pizza").change(update_pizza);
</script>
Eu tentei vários métodos como definir atributo disabled usando .prop()
, .attr()
e .disabled=
. No entanto, nada acontece. Ao aplicar a um em <input type="checkbox">
vez de <select>
, o código funciona perfeitamente.
Como desativar / ativar o <select>
uso do jQuery?
Respostas:
Você gostaria de usar código como este:
Aqui está um exemplo de trabalho
fonte
$('#pizza_kind').prop('disabled', false);
e$('#pizza_kind').prop('disabled', true);
. Como a documentação do jQuery diz : As propriedades geralmente afetam o estado dinâmico de um elemento DOM sem alterar o atributo HTML serializado. Os exemplos incluem a propriedade value de elementos de entrada, a propriedade desativada de entradas e botões ou a propriedade marcada de uma caixa de seleção. O método .prop () deve ser usado para definir desativado e verificado em vez do método .attr (). O método .val () deve ser usado para obter e definir valor.Para poder desabilitar / habilitar as seleções, primeiro é necessário que você selecione uma ID ou classe. Então você poderia fazer algo assim:
Desativar:
Habilitar:
fonte
.removeAttr()
não define mais as propriedades como false jquery.com/upgrade-guide/3.0/… stackoverflow.com/a/13626565/125981Desativado é um booleano Atributo do elemento select como afirma WHATWG , isso significa que o DIREITO maneira de desativar com jQuery seria
Isso tornaria esse HTML
Isso funciona para XHTML e HTML (referência W3School)
No entanto, isso também pode ser feito usando-o como propriedade
obtendo
O que funciona apenas para HTML e não para XTML
NOTA: Um elemento desabilitado não será enviado com o formulário conforme respondido nesta pergunta: O elemento desabilitado do formulário não é enviado
NOTA2: Um elemento desativado pode estar acinzentado.
NOTA 3:
TL; DR
fonte
Basta usar:
DEMONSTRA
fonte
Use o seguinte:
Ou simplesmente adicione
id="pizza_kind"
à<select>
tag, como<select name="pizza_kind" id="pizza_kind">
: jsfiddle linkO motivo pelo qual seu código não funcionou é simplesmente porque
$("#pizza_kind")
não está selecionando o<select>
elemento porque ele não possuiid="pizza_kind"
.Edit: na verdade, um seletor melhor é
$("select[name='pizza_kind']")
: jsfiddle linkfonte
O seu
select
não tem um ID, apenas um nome. Você precisará modificar seu seletor:Demonstração: http://jsbin.com/imokuj/2/edit
fonte
desculpe-me por responder no tópico antigo, mas o meu código pode ajudar outros no futuro.i estava no mesmo cenário em que quando a caixa de seleção estiver marcada, poucos campos de entrada selecionados serão habilitados de outra forma desativada.
fonte
Boa pergunta - acho que a única maneira de conseguir isso é filtrar os itens no select.
Você pode fazer isso através de um plugin jquery. Verifique o link a seguir, descreve como obter algo semelhante ao que você precisa. Obrigado
jQuery desativar opções SELECT com base no rádio selecionado (precisa de suporte para todos os navegadores)
fonte