2010-01-05 25 views
25

He código HTML siguiente con dos elementos con el mismo nombrejQuery - Establecer valor de atributo

<input type="hidden" name= "chk0" value=""> 
<input type="checkbox" name="chk0" value="true" disabled> 

A través de jQuery, quiero establecer el habilite la casilla de verificación. Entonces, estoy usando algo como esto:

$('#chk0').attr("disabled",false); 

Pero esto no funciona. Supongo que JQuery se confunde con dos elementos que tienen el mismo nombre idéntico. Desafortunadamente, no puedo evitar usar dos nombres diferentes porque, cuando se publica el formulario, quiero que se publiquen todas las casillas de verificación (no solo las que están marcadas). Por lo tanto, tengo que usar elementos ocultos con el mismo nombre ... Entonces, volviendo a la pregunta, ¿cómo puedo habilitar la casilla de verificación a través de JQuery en el escenario anterior? ¿Hay un parámetro "tipo" para attr que se oculte de la casilla de verificación?

Gracias

Respuesta

26

Algunas cosas antes del código real ..

hash (#) que utiliza como selector para ID y no para nombres de elementos. también el atributo deshabilitado no es un verdadero escenario falso ... si tiene el atributo deshabilitado significa que es verdadero ... necesita eliminar el atributo y no establecerlo en falso. También existen los selectores de forma que identifican los tipos específicos de artículos en una forma ..

lo que el código sería

$("input:checkbox[name='chk0']").removeAttr('disabled'); 

Llevar la respuesta hasta a la fecha de

Usted debe utilizar el método .prop() (añadieron desde v1.6)

$("input:checkbox[name='chk0']").prop('disabled', false); // to enable the checkbox 

y

$("input:checkbox[name='chk0']").prop('disabled', true); // to disable the checkbox 
+0

Esto funciona perfectamente ... Si tengo que habilitar la casilla de verificación, entonces será $ ("input: checkbox [name = 'chk0']"). Attr ('disabled', false); – Jake

+0

bien ... como se muestra en http://www.w3schools.com/tags/att_input_disabled.asp, el valor oficial para poner se deshabilitará nuevamente así que $ ("input: checkbox [name = 'chk0']"). Attr ('deshabilitado', 'deshabilitado'); –

+0

lo obtuve .. Gracias a Hogan en este ... $ ("input: checkbox [name = 'chk0']"). Attr ('disabled', 'disabled'); funciona bien – Jake

2

$ ("# chk0") está refiriéndose a un elemento con el ID chk0. Puede intentar agregar identificadores a los elementos. Los Id. Son únicos a pesar de que los nombres son los mismos, de modo que en jQuery puede acceder a un solo elemento mediante su id.

+0

+1 esto es más simple y será mucho más rápido que el selector ': checkbox' que no es estándar (obligando a jQuery a usar el motor de selector Sizzle lento en lugar del rápido método querySelectorAll de un navegador). – bobince

0

Use una identificación para identificar de forma única la casilla de verificación. Su ejemplo actual está tratando de seleccionar la casilla de verificación con un id de '# chk0':

<input type="checkbox" id="chk0" name="chk0" value="true" disabled>

$('#chk0').attr("disabled", "disabled");

También tendrá que quitar el atributo de disabled para habilitar la casilla de verificación. Algo así como:

$('#chk0').removeAttr("disabled");

Consulte la documentación de removeAttr

El valor XHTML para activar/desactivar un elemento de entrada es el siguiente:

<input type="checkbox" id="chk0" name="chk0" value="true" disabled="disabled" /> 
<input type="checkbox" id="chk0" name="chk0" value="true" /> 

Tenga en cuenta que es la ausencia de el atributo desactivado que habilita el elemento de entrada.

+0

El uso de la misma identificación para dos elementos diferentes en el mismo documento es HTML no válido. –

0

Se pueden añadir diferentes clases para seleccionar, o seleccionar por tipo así:

$('input[type="checkbox"]').removeAttr("disabled");

5

"verdadero" y "falso" no funcionan, para desactivar, establezca el valor desactivado.

$('.someElement').attr('disabled', 'disabled');

Para habilitar, retire.

$('.someElement').removeAttr('disabled');

Además, no se preocupe por varios elementos, siendo seleccionados, jQuery operará en todos ellos ese partido. Si necesita solo uno, puede usar muchas cosas: primero,: último, enésimo, etc.

Está usando nombre y no identificación como otra mención - recuerde, si usa id válido, xhtml requiere que los identificadores sean únicos.

+3

'attr' no hace lo que crees que hace. – bobince

10

serio, simplemente no hace uso de jQuery para esto. disabled es una propiedad booleana de elementos de formulario que funciona perfectamente en todos los navegadores importantes desde 1997, y no hay forma posible de que sea más simple o más intuitivo cambiar si un elemento de formulario está desactivado o no.

La forma más sencilla de obtener una referencia a la casilla de verificación sería darle un id. Aquí está mi sugerido HTML:

<input type="hidden" name="chk0" value=""> 
<input type="checkbox" name="chk0" id="chk0_checkbox" value="true" disabled> 

Y la línea de JavaScript para hacer que la casilla de verificación activada:

document.getElementById("chk0_checkbox").disabled = false; 

Si lo prefiere, en su lugar puede utilizar jQuery para controlar la casilla:

$("#chk0_checkbox")[0].disabled = false; 
+0

+1 use jQuery para lo que es bueno, no lo aplique ciegamente en todas partes. – bobince

+0

¿Es incorrecto usar jquery solo para que pueda seleccionar el elemento correcto? Como en el caso en que le dio dos elementos con la misma identificación, pero los anudó dentro de otros elementos con diferentes ID, entonces puede seleccionar uno con $ (# parent1 #child) y el otro con $ (# parent2 #child)? – BCarpe

+0

@BCarpe: Tener dos elementos con el mismo 'id' no es válido y debe evitarse. Sin embargo, es razonable usar jQuery para establecer una propiedad de múltiples elementos a la vez. Sugeriría usar '$ (" whatever "). Prop (" disabled ", false)' en jQuery 1.6. –

Cuestiones relacionadas