检索当前行的表行索引

时间:2010-03-30 13:37:32

标签: javascript jquery validation

我试图在失去焦点时验证文本输入。我想知道它所在的表格中的哪一行。这是我到目前为止所持有的并且它一直以未定义的形式返回。有什么想法吗?

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

4 个答案:

答案 0 :(得分:14)

rowIndex是一个DOM属性,而不是jQuery方法,所以你必须在底层的DOM对象上调用它:

tableRow[0].rowIndex

或只是:

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

因为你并没有真正使用jQuery。

在jQuery 1.4中有$(row).index(),但它会扫描兄弟姐妹以找出它在父节点中的子元素编号。这种情况较慢,如果您有多个rowIndex,则会向<tbody>返回不同的结果。

答案 1 :(得分:2)

使用jQuery 1.4。*,您可以使用index() method.

你的选择器需要更具体一点。您还应该使用closest方法,而不是多个parent()调用。还要缓存$(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();
    }
});

警报也不是一个非常好的调试工具,可能是时候查看firebug

答案 2 :(得分:1)

您正在尝试在jQuery对象上使用DOM Core属性。试试这个:

alert(tableRow[0].rowIndex);

@jandreas:来自W3C文档: rowIndex of type long, readonly, modified in DOM Level 2     这是按逻辑顺序而不是文档顺序。 rowIndex确实考虑了表中的部分(THEAD,TFOOT或TBODY),将THEAD行放在索引中,然后是TBODY行,接着是TFOOT行。

.index()不会考虑那些THEAD等。

答案 3 :(得分:0)

如果您的版本是1.3+,请尝试closest('tr')。它比parent()。parent()

更好