2010-03-30 36 views
5

Tôi đang cố xác thực một kiểu nhập văn bản khi nó mất tiêu điểm. Tôi muốn biết đó là hàng của bảng. Đây là những gì tôi có cho đến nay và nó giữ trở lại như không xác định. Ý tưởng nào?Lấy chỉ mục hàng bảng của hàng hiện tại

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

Trả lời

12

rowIndex là một tài sản DOM, không phải là một phương pháp jQuery, vì vậy bạn phải gọi nó là trên đối tượng DOM cơ bản:

tableRow[0].rowIndex 

hoặc chỉ:

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

kể từ khi bạn aren 't thực sự sử dụng jQuery cho nhiều ở đó.

Trong jQuery 1.4 có $(row).index(), nhưng nó quét anh chị em để tìm ra con số phần tử con nào trong phần tử cha của nó. Điều này chậm hơn và sẽ trả về kết quả khác với rowIndex trong trường hợp bạn có nhiều số <tbody> s.

+0

tôi gần như mất hết hy vọng nhưng câu trả lời của bạn đã cứu tôi. Cảm ơn một bó –

0

thử closest('tr') nếu bạn là phiên bản 1.3+. nó sẽ hoạt động tốt hơn parent(). parent()

1

Bạn đang cố sử dụng thuộc tính DOM Core trên đối tượng jQuery. Hãy thử điều này:

alert(tableRow[0].rowIndex);

@jandreas: từ các tài liệu W3C: rowIndex of type long, readonly, modified in DOM Level 2 Đây là theo thứ tự hợp lý và không theo thứ tự tài liệu. RowIndex có tính đến các phần (THEAD, TFOOT hoặc TBODY) trong bảng, đặt hàng THEAD đầu tiên trong chỉ mục, tiếp theo là hàng TBODY, tiếp theo là các hàng TFOOT.

.index() sẽ không tính đến THEAD đó ....

2

Với jQuery 1.4. * Bạn có thể sử dụng index() method.

chọn của bạn là một chút cụ thể hơn sau đó nó cần phải được. Ngoài ra, bạn nên sử dụng phương thức closest thay vì nhiều lệnh gọi cha mẹ(). Cũng 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(); 
    } 
}); 

Ngoài ra cảnh báo không phải là một công cụ gỡ lỗi rất tốt, có thể là thời gian để bạn có thể kiểm tra firebug

+0

Cảm ơn tất cả các đề xuất của bạn! Tôi không sử dụng 1.4. * Vì vậy tôi không có quyền truy cập vào phương thức index(), tuy nhiên tôi đã thực hiện phần còn lại của các đề xuất của bạn +1 – Jon

Các vấn đề liên quan