/ / Refactor jquery para pasar jquery-lint - jquery, jquery-lint

Refactor jquery para pasar jquery-lint - jquery, jquery-lint

Tengo el siguiente código en una página html

jQuery("input[name="newstate"]").change(function(){
if(jQuery(this).attr("checked")) {
jQuery("input[name="new-state-name"]").show();
} else {
jQuery("input[name="new-state-name"]").hide();
}
});

Pero la pelusa jquery da el siguiente mensaje.

Solo debe usar el mismo selector más de una vez cuando sepa que la colección devuelta será diferente. Por ejemplo, si ha agregado más elementos a la página que pueden cumplir con el selector

¿Cómo modifico mi código para eliminar este mensaje?

Respuestas

3 para la respuesta № 1

los .toggle() método acepta un booleano para showOrHide:

jQuery("input[name="newstate"]").change(function(){
// You can use this.checked instead of jQuery(this).attr("checked");
jQuery("input[name="new-state-name"]").toggle(this.checked);
});

De esta manera usted "ll saber que el new-state-name estado de visualización de la entrada siempre coincide con el newstate entrada (es decir, se mostrará cuando esté marcada, sin tener en cuenta su estado anterior). Lo que quiero decir es que, utilizando toggle() sin showOrHide puedes arriesgarte a que el newstate estado y new-state-name el estado de la pantalla se desincroniza si, por ejemplo, la new-state-name El estado de visualización de la entrada se manipula desde fuera del newstate change() entrenador de animales.


Por supuesto, también puede asignar el conjunto de resultados a una variable temporal para realizar el selector una sola vez:

jQuery("input[name="newstate"]").change(function(){
var newStateInput = jQuery("input[name="new-state-name"]");
if(this.checked) {
newStateInput.show();
// ... more here
} else {
newStateInput.hide();
// ... and/or here
}
});

Si pretendes hacer más que mostrar / esconder.


EDITAR
Vaya, desafortunado error tipográfico. show() debiera ser toggle() en primera solucion


1 para la respuesta № 2
jQuery("input[name="newstate"]").change(function(){
jQuery("input[name="new-state-name"]").toggle();
});