我试图在失去焦点时验证文本输入。我想知道它所在的表格中的哪一行。这是我到目前为止所持有的并且它一直以未定义的形式返回。有什么想法吗?
$("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();
}
});
答案 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)