2010-09-14 9 views
5

Estoy usando el siguiente widget http://www.erichynds.com/examples/jquery-ui-multiselect-widget/demos/ Hasta ahora ha funcionado muy bien, pero necesito ayuda para agregar atributos. Al usar Firebug, me di cuenta de que simplemente haciendo clic en la casilla de verificación el atributo comprobado no aparece como yo esperaba. En mi código, he modificado el widget, he podido agregar código para eliminar el atributo de marcado.Agregando el atributo marcado a través de jQuery

this.removeAttribute(\'checked\'); this.checked=false; 

si el artículo fue comprobado de antemano. He tenido éxito en el uso de este código

this.setAttribute(\'checked\', \'checked\'); this.checked=true; 

si el elemento no se ha marcado cuando se carga la página.

Mi problema viene cuando tengo que ser capaz de utilizar ambos conjuntos de código en la casilla de verificación, he intentado lo siguiente

onclick="if($(this).attr(\'checked\') == \'true\') { this.setAttribute(\'checked\', \'checked\'); this.checked=true; } else { this.removeAttribute(\'checked\'); this.checked=false; } 

el código va a quitar el atributo de comprobar (si se activa antes de la mano en la carga de la página), pero cuando intento hacer clic en la casilla de verificación para agregar el atributo (si no está marcado en la carga de la página), no ocurre nada.

Gracias por cualquier ayuda, y lo siento por mi pobre codificación.

+0

Gracias chicos. La razón de esto es que estoy intentando realizar un evento toggle() en el encabezado de optgroup.Cuando un usuario hace clic en esto, colapsará la sección asociada con él, sin embargo, mostrará los elementos que están marcados. Funciona si alternas el evento de ida y vuelta sin marcar o desmarcar un elemento. El problema que estoy teniendo es que si tienes un elemento que está marcado en la carga de la página, el alternar() funcionará. Si lo desmarcas, el alternar() no funcionará para ese elemento porque estoy mirando el atributo marcado. Hay otra manera de hacer esto? – Chris

+0

no necesita escapar comillas simples que están entre comillas dobles – RobertPitt

Respuesta

1

Al usar Firebug, me he dado cuenta de que simplemente haciendo clic en la casilla de verificación el atributo marcado no aparece como yo esperaba.

¿Por qué necesita el atributo checked en absoluto? La propiedad checked proporciona toda la funcionalidad que normalmente necesitaría, es decir, marcar la casilla establecerá element.checked en true y viceversa, es decir, modificar element.checked cambiará el estado del cuadro.

+0

En última instancia, estoy usando la propiedad marcada para alternar los grupos de opciones para un efecto de mostrar/ocultar. Si el código determina que un elemento está marcado cuando se activa el evento de alternar, a continuación, muestre los elementos que están marcados, si no los oculta. ¿Hay alguna otra manera de lograr este objetivo? – Chris

+0

Solo necesita usar la propiedad 'checked' del elemento, por ej. '$ ('# id') [0] .checked' – casablanca

2

me he dado cuenta de que simplemente haciendo clic en la casilla de verificación del atributo comprobado no aparece

Eso es absolutamente correcto. El atributo checkedno se corresponde con con la comprobación actual de la entrada; en realidad corresponde a la verificación inicial del documento HTML, la verificación que se restablecerá si se restablece el formulario.

IE agrega el atributo porque IE está mal. getAttribute/setAttribute están rotos en IE, ¡nunca los use en un documento HTML! De hecho, establecieron la propiedad, no el atributo.

Esta es la propiedad defaultChecked. Pero, ¿por qué intentas configurar el atributo checked? Casi nunca hay una buena razón para hacerlo. Normalmente, la simple y antigua propiedad checked es lo que estás buscando.

14

En jQuery para eliminar un atributo utilizar

this.removeAttr('checked'); 

y para establecer un atributo utilizar

this.attr('checked', 'checked'); 
Cuestiones relacionadas