Me gustaría crear una opción en una forma como
[] I would like to order a [selectbox with pizza] pizza
donde selectbox está habilitado solo cuando la casilla de verificación está marcada y deshabilitada cuando no está marcada.
Se me ocurre 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>
He intentado varios métodos de cómo establecer el atributo de personas con discapacidad utilizando .prop()
, .attr()
y .disabled=
. Sin embargo, no pasa nada. Cuando se aplica a un en <input type="checkbox">
lugar de <select>
, el código funciona perfectamente.
¿Cómo deshabilitar / habilitar <select>
usando jQuery?
Respuestas:
Te gustaría usar un código como este:
Aquí está el ejemplo de trabajo
fuente
$('#pizza_kind').prop('disabled', false);
y$('#pizza_kind').prop('disabled', true);
. Como dice la documentación de jQuery : Las propiedades generalmente afectan el estado dinámico de un elemento DOM sin cambiar el atributo HTML serializado. Los ejemplos incluyen la propiedad de valor de los elementos de entrada, la propiedad deshabilitada de entradas y botones, o la propiedad marcada de una casilla de verificación. El método .prop () debe usarse para establecer deshabilitado y marcado en lugar del método .attr (). El método .val () debe usarse para obtener y establecer el valor.Para poder deshabilitar / habilitar selecciones, en primer lugar, sus selecciones necesitan una ID o clase. Entonces podrías hacer algo como esto:
Inhabilitar:
Habilitar:
fuente
.removeAttr()
ya no establece propiedades en falso jquery.com/upgrade-guide/3.0/… stackoverflow.com/a/13626565/125981Disabled es un atributo booleano del elemento select según lo establecido por WHATWG , eso significa que la MANERA CORRECTA DE DESACTIVAR con jQuery sería
Esto haría que este HTML
Esto funciona tanto para XHTML como para HTML (referencia de W3School)
Sin embargo, también se puede hacer usándolo como propiedad
consiguiendo
Que solo funciona para HTML y no para XTML
NOTA: un elemento deshabilitado no se enviará con el formulario como se respondió en esta pregunta: el elemento deshabilitado no se envía
NOTA2: Un elemento deshabilitado puede estar atenuado.
NOTA 3:
TL; DR
fuente
Simplemente use:
DEMO
fuente
Use lo siguiente:
O simplemente agregue
id="pizza_kind"
a la<select>
etiqueta, como<select name="pizza_kind" id="pizza_kind">
: enlace jsfiddleLa razón por la que su código no funcionó es simplemente porque
$("#pizza_kind")
no está seleccionando el<select>
elemento porque no tieneid="pizza_kind"
.Editar: en realidad, un mejor selector es
$("select[name='pizza_kind']")
: enlace jsfiddlefuente
Tu
select
no tiene una identificación, solo un nombre. Tendrá que modificar su selector:Demostración: http://jsbin.com/imokuj/2/edit
fuente
perdón por responder en el hilo anterior, pero mi código puede ayudar a otros en el futuro. Estaba en el mismo escenario que cuando la casilla de verificación esté marcada, pocos campos de entrada seleccionados se habilitarán de otra manera.
fuente
Buena pregunta: creo que la única forma de lograr esto es filtrar los elementos en la selección.
Puede hacerlo a través de un complemento jquery. Consulte el siguiente enlace, que describe cómo lograr algo similar a lo que necesita. Gracias
jQuery deshabilite las opciones SELECCIONAR en función de la Radio seleccionada (Necesita soporte para todos los navegadores)
fuente