2012-05-13 49 views
132

Me gustaría crear una opción en una forma como¿Cómo deshabilitar/habilitar el campo de selección usando jQuery?

[] I would like to order a [selectbox with pizza] pizza 

donde selectbox sólo se activa cuando la casilla de verificación está activada y desactivada cuando no se controla.

llego a tener 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> 

Probé varios métodos de cómo establecer el atributo de personas con discapacidad mediante .prop(), .attr() y .disabled=. Sin embargo, nada sucede. Al aplicar a un <input type="checkbox"> en lugar de <select>, el código funciona perfectamente.

Cómo deshabilitar/habilitar <select> usando jQuery?

+0

hola, funciona este enfoque en IE 10? no sé cómo habilitar un campo de selección en IE 10. – ROROROOROROR

Respuesta

228

¿Le gustaría utilizar código como el siguiente:

<form> 
    <input type="checkbox" id="pizza" name="pizza" value="yes"> 
    <label for="pizza">I would like to order a</label> 
    <select id="pizza_kind" 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').prop('disabled', false); 
    } 
    else { 
     $('#pizza_kind').prop('disabled', 'disabled'); 
    } 
    }; 
    $(update_pizza); 
    $("#pizza").change(update_pizza); 
</script> 

Aquí está trabajando example

+22

'$ ('# pizza_kind'). prop ('disabled', false);' y '$ ('# pizza_kind'). prop ('disabled', true);'. Como dice [la documentación de jQuery] (http://api.jquery.com/prop/): _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 las entradas y los botones, o la propiedad marcada de una casilla de verificación. El método .prop() se debe usar para desactivar y verificar en lugar del método .attr(). El método .val() se debe usar para obtener y establecer value._ – naor

+1

para jQuery 3, debe ser "$ ('# pizza_kind'). Prop ('disabled', true/false);" por lo que sé –

+2

¿Qué es $ (update_pizza); ¿obra? ¿Envolviendo la función en un objeto jquery? – Edward

6

utilizar lo siguiente:

$("select").attr("disabled", "disabled"); 

o simplemente añadir id="pizza_kind"-<select> etiqueta, como <select name="pizza_kind" id="pizza_kind">: jsfiddle link

La razón por la que su código no funciona es simplemente porque no es $("#pizza_kind") seleccionando el elemento <select> porque no tiene id="pizza_kind".

Editar: en realidad, un selector mejor es $("select[name='pizza_kind']"): jsfiddle link

90

Para poder activar/desactivar en primer lugar sus selecciona necesitan una identificación o una clase de selecciones. Posteriormente, se podría hacer algo como esto:

Desactivar:

$('#id').attr('disabled', 'disabled'); 

Habilitar:

$('#id').removeAttr('disabled'); 
+6

"El método .prop() se debe utilizar para establecer deshabilitado y se verificó en lugar del método .attr()" fuente: http://api.jquery.com/prop/ – Colin

13

Simplemente basta con utilizar:

var update_pizza = function() { 
    $("#pizza_kind").prop("disabled", !$('#pizza').prop('checked')); 
}; 

update_pizza(); 
$("#pizza").change(update_pizza); 

DEMO

4

Su select no tiene una identificación, solamente un nombre.Tendrá que modificar el selector:

$("#pizza").on("click", function(){ 
    $("select[name='pizza_kind']").prop("disabled", !this.checked); 
}); 

Demostración: http://jsbin.com/imokuj/2/edit

2

lo siento por responder en el hilo de edad, pero puede mi código ayuda a otros en future.i fue en mismo escenario que cuando se comprobará casilla de verificación a continuación, algunos campos de entradas seleccionados se habilitarán de otra manera deshabilitados.

$("[id*='chkAddressChange']").click(function() { 
    var checked = $(this).is(':checked'); 
    if (checked) { 
     $('.DisabledInputs').removeAttr('disabled'); 
    } else { 
     $('.DisabledInputs').attr('disabled', 'disabled'); 
    } 
}); 
12

discapacitados es un Boolean Attribute del select element según lo declarado por WHATWG, eso significa que la manera correcta para inhabilitar la con jQuery sería

jQuery("#selectId").attr('disabled',true); 

Esto haría este código HTML

<select id="selectId" name="gender" disabled="disabled"> 
    <option value="-1">--Select a Gender--</option> 
    <option value="0">Male</option> 
    <option value="1">Female</option> 
</select> 

Esto funciona tanto para XHTML and HTML (W3School reference)

Sin embargo, también se puede hacer utilizando como propiedad

jQuery("#selectId").prop('disabled', 'disabled'); 

conseguir

<select id="selectId" name="gender" disabled> 

Lo que sólo funciona para HTML y no XTML

NOTA: Un elemento discapacitado no será enviado con el formulario como se responde en esta pregunta: The disabled form element is not submitted

NOTA2: Un elemento desactivado puede aparecer atenuado.

NOTA 3:

un control de formulario que se debe evitar cualquier deshabilitado eventos de clic que están en cola en el origen de la tarea interacción del usuario que se distribuya en el elemento.

TL; DR

<script> 
    var update_pizza = function() { 
     if ($("#pizza").is(":checked")) { 
      $('#pizza_kind').attr('disabled', false); 
     } else { 
      $('#pizza_kind').attr('disabled', true); 
     } 
    }; 
    $(update_pizza); 
    $("#pizza").change(update_pizza); 
</script> 
Cuestiones relacionadas