2011-02-18 9 views
5

Mi htmlJquery encontrar una casilla dentro de una fila de la tabla

<TR class="datarow" id="rowId"><TD>1</TD><TD>895171</TD><td class="classID"><INPUT type="checkbox" /></TD></TR> 

¿Cómo utilizo jQuery para averiguar si la casilla de verificación en esta fila en particular está marcada o no. Supongamos que conozco el rowId único.

Actualmente, estoy haciendo esto

var checkbox = $('#' + rowId + " td input:checkbox"); 

     if (checkbox.checked) { 
      alert("checked"); 
     } else { 
      alert("unchecked"); 
     } 

Pero esto no parece para detectar cuando se marca la casilla.

EDITADO Curiosamente, la siguiente tampoco funcionó:

 var curRow = $('#' + curRowId); 
     var checkbox = $(curRow).find('input:checkbox').eq(0); 



     if (checkbox.checked) { 
      alert("checked"); 

     } else { 
      alert("unchecked"); 

     } 

Respuesta

9

Usted puede hacer esto:

var isChecked = $("#rowId input:checkbox")[0].checked; 

que utiliza un selector descendiente de la casilla de verificación, a continuación, obtiene el elemento DOM en bruto, y mira a su propiedad checked.

Referencias para selectores:

  • Selectores apoyadas por la mayoría de los navegadores: CSS 2.1
  • selectores más recientes apoyados por algunos navegadores y por varias bibliotecas de JavaScript (para interactuar con el DOM): CSS3 Selectors
+0

Er, y la referencia que falta más arriba: [Selectores adicionales compatibles con jQuery] (http://api.jquery.com/category/selectors/) –

+0

¡Esto funciona! ¿Podría proporcionar una solución sobre cómo configurarlo si no lo es? Parece que no puedo encontrarlo #confused – Notflip

+0

@MiguelStevens: simplemente asigne 'true' o' false' a la propiedad 'checked'. –

4

Actualizado:

var rowId = ""; 
var checked = $("#" + rowId + " input:checkbox")[0].checked; 

Su código original no funciona debido a que está llamando en una checked conjunto de resultados jQuery. Debe obtener el elemento DOM real, que puede hacer llamando al get() (o indexando el objeto directamente como en la respuesta de T.J.). Como solo hay un resultado, quiere que el elemento en el índice 0 en el conjunto de resultados.

Editar después de ver código actualizado en OP:

Usando eq()reduce los elementos coincidentes al uno en el índice especificado. De hecho, esto devolverá un conjunto de resultados jQuery con un objeto coincidente, el que solicitó en el índice especificado. Es todavía no devuelve un elemento DOM, que debe utilizar la propiedad checked.

+0

'.is (": checked ")' - ** wow ** ese es el largo camino 'redondo ... –

+0

@ T.J. Crowder: De acuerdo, respuesta actualizada. –

+0

@Andrew: 'get (0)' también es un camino largo. ;-) –

0

Esto lo haría

var checked = $("#rowId" + rowId + " td.classID input:checkbox").is(":checked"); 
1

Si usted tiene solamente una casilla en cada fila esta es la manera más rápida

!!$('#rowId input:checked').length 

También puede omitir el !! y verificar contra '> 0' pero creo que el !! es realmente más rápido

Cuestiones relacionadas