2010-03-07 21 views
42

Tengo una fila en una tabla que contiene una casilla de verificación y algunos otros campos de formulario (cuadros de texto, campos ocultos, listas de selección). Cuando la casilla de verificación está marcada, deseo desactivar todos los campos de formulario en esa fila, excepto los campos ocultos. Tengo esto funcionando en su mayor parte, pero parece que no puedo ignorar los campos ocultos.JQuery Seleccionar campos de entrada Excepto Oculto

¿Cuál es la mejor manera de seleccionar todos los campos de formulario en una fila de tabla pero ignorar los campos ocultos en la selección?

Respuesta

1

.........

$('tr input').attr('disabled', true) 
$('tr input[type="hidden"]').removeAttr('disabled') 
38

Suponiendo por "oculta" que quiere decir type="hidden" es decir:

<input type="hidden" name="foo" value="bar"> 

continuación, puede utilizar la attribute not equals selector para hacer esto:

$("tr input:checkbox").click(function() { 
    var cb = $(this); 
    var tr = $(this).closest("tr"); 
    if (cb.val()) { 
    tr.find("input[type!='hidden']").attr("disabled", true); 
    } else { 
    tr.find("input[type!='hidden']").removeAttr("disabled"); 
    } 
}); 

Mi consejo general es evitar los selectores de atributos. Ellos son lentos Proporcione las entradas relevantes (ya sean las ocultas o no ocultas) una clase y luego use eso en los selectores.

Sin embargo, si quieres decir "oculta", como en "no visible" y utilice el :visible selector:

$("tr input:checkbox").click(function() { 
    var cb = $(this); 
    var tr = $(this).closest("tr"); 
    if (cb.val()) { 
    tr.find("input:visible").attr("disabled", true); 
    } else { 
    tr.find("input:visible").removeAttr("disabled"); 
    } 
}); 
+0

@Cletus ¿Usted cree que un filtro() con una función que comprueba si "this.type" es "oculto" sería más rápido que el atributo en el selector ¿prueba? – Pointy

+0

Ahh, nunca pensé en etiquetarlos con una clase. ¡Bonito! – Bob

+0

@cletus - Excelente consejo sobre el uso de clases. Acabo de hacer que mi vida valga la pena. –

0

En primer lugar, es necesario asignar etiquetas a su casilla de verificación "selector" (por ejemplo, con un atributo de clase "del selector) . por lo que es claro que se utiliza para el control en lugar de elemento de forma regular, entonces se utiliza esta:

$('table :checkbox.selector').click(function(ev) { 
    $(ev.currentTarget) 
      .parents('td').siblings('td') 
      .find(':input:not([type=hidden])') 
      .attr('disabled', ev.currentTarget.checked); 
}); 

esta solución funciona para todas las entradas (. ej listas de selección, áreas de texto) y no se deshabilita el casilla de selección del selector.

Supongo que usa la última jQuery.

0

he encontrado una manera sencilla de hacer esto en jQuery.

$("tr input").not("input[type='hidden']") 

En siguiente fragmento de código, hay un div con un id de tabsDiv que contiene varios elementos HTML y este código se lleva todos los elementos de entrada dentro de este div excepto aquellos con tipo de hidden.

$("#tabsDiv").find("input").not("input[type='hidden']") 
0

Simplemente agregue un filtro de visible, lo que significa que solo tomará elementos de entrada que sean visibles para los usuarios.
Esto funcionó para mí. Estoy agregando una descripción para 30 char.

$ ("Entrada: visibles")

Cuestiones relacionadas