2010-03-30 20 views
5

Estoy tratando de validar una entrada de texto cuando pierde el foco. Me gustaría saber en qué fila de la mesa está. Esto es lo que tengo hasta ahora y sigue volviendo como indefinido. ¿Algunas ideas?Recuperar el índice de la fila de la tabla de la fila actual

$("div#step-2 fieldset table tbody tr td input").blur(function() { 
    var tableRow = $(this).parent().parent(); 
    if ($.trim($(this).val()) == "") { 
     $(this).addClass("invalid"); 
     alert(tableRow.rowIndex); 
     $(this).val(""); 
    } else { 
     $(this).removeClass("invalid"); 
     checkTextChanges(); 
    } 
}); 

Respuesta

12

rowIndex es una propiedad DOM, no es un método jQuery, así que hay que llamar en el objeto DOM subyacente:

tableRow[0].rowIndex 

o simplemente:

var row= this.parentNode.parentNode; 
alert(row.rowIndex); 

ya que aren Realmente no uso jQuery para mucho allí.

En jQuery 1.4 hay $(row).index(), pero escanea a los hermanos para descubrir qué número de elemento hijo está en su elemento primario. Esto es más lento y devolverá un resultado diferente al rowIndex en el caso en que tenga múltiples <tbody> s.

+0

casi he perdido todas las esperanzas, pero su respuesta me salvó. Muchas gracias –

1

Está intentando utilizar el atributo DOM Core en el objeto jQuery. Prueba esto:

alert(tableRow[0].rowIndex);

@jandreas: a partir de los documentos del W3C: rowIndex of type long, readonly, modified in DOM Level 2 Esto está en orden lógico y no en el orden del documento. RowIndex tiene en cuenta las secciones (THEAD, TFOOT o TBODY) dentro de la tabla, colocando THEAD rows primero en el índice, seguido de las filas de TBODY, seguidas de las filas de TFOOT.

.index() no tomaría THEADS, etc. en cuenta.

2

con jQuery 1.4. * Se puede utilizar el index() method.

Su selector es un poco más específico, entonces tiene que ser. También debe usar el método closest en lugar de varias llamadas principales(). También caché $ (esto).

$("#step-2 fieldset table td input").blur(function() { 
    var that = $(this), 
     tableRow = that.closest('tr'); 
    if ($.trim(that.val()) == "") { 
     that.addClass("invalid"); 
     alert(tableRow.index()); 
     that.val(""); 
    } else { 
     that.removeClass("invalid"); 
     checkTextChanges(); 
    } 
}); 

Tampoco se alerta una muy buena herramienta de depuración, podría ser el momento para que usted echa un vistazo a firebug

+0

¡Gracias por todas sus sugerencias! No estoy usando 1.4. * Así que no tuve acceso al método index(), sin embargo, he implementado el resto de tus sugerencias +1 – Jon

Cuestiones relacionadas