2010-03-30 16 views
5

Próbuję sprawdzić poprawność wpisu tekstowego, gdy utraci on fokus. Chciałbym wiedzieć, w którym rzędzie stołu jest. To jest to, co do tej pory miałem i ciągle powraca jako niezdefiniowany. Jakieś pomysły?Pobierz indeks wiersza tabeli bieżącego wiersza

$("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(); 
    } 
}); 

Odpowiedz

12

rowIndex jest własnością DOM, a nie metoda jQuery, więc trzeba to nazwać na bazowym obiektu DOM:

tableRow[0].rowIndex 

lub po prostu:

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

ponieważ aren Naprawdę bardzo wykorzystuję jQuery.

W jQuery 1.4 istnieje $(row).index(), ale skanuje rodzeństwo, aby dowiedzieć się, który numer elementu podrzędnego znajduje się w jego katalogu nadrzędnym. Jest to wolniejsze i zwróci inny wynik niż rowIndex w przypadku, gdy masz wiele modeli <tbody>.

+0

prawie straciłem wszelkie nadzieje ale odpowiedź mnie uratował. Dzięki pęczku –

1

Próbujesz użyć atrybutu DOM Core w obiekcie jQuery. Spróbuj tego:

alert(tableRow[0].rowIndex);

@jandreas: od W3C docs: rowIndex of type long, readonly, modified in DOM Level 2 To jest w porządku logicznym, a nie w kolejności dokumentu. Argument rowIndex uwzględnia sekcje (THEAD, TFOOT lub TBODY) w tabeli, umieszczając najpierw wiersze THEAD w indeksie, a następnie wiersze TBODY, a następnie wiersze TFOOT.

nie uwzględni tych danych THEAD itp.

2

z jQuery 1.4. * Można użyć index() method.

Twój selektor jest trochę bardziej szczegółowe to musi być. Powinieneś także użyć metody closest zamiast wielu wywołań parent(). Również cache $ (this).

$("#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(); 
    } 
}); 

Również alarm nie jest bardzo dobrym narzędziem do debugowania, może być czas, aby sprawdzić firebug

+0

Dzięki za wszystkie sugestie! Nie używam wersji 1.4. *, Więc nie miałem dostępu do metody index(), jednak zaimplementowałem pozostałe twoje sugestie +1 – Jon

Powiązane problemy