• ベストアンサー

テーブルの最後の行であるか判別したい

テーブルの中にあるテキストボックスのonchangeイベントの中で、このテキストボックスが最後の行(<tr>レベル)であることを知るにはどうすればいいでしょうか? <table> <tr><td><input type="text" onchange="islastline()"></td></tr> <tr><td><input type="text" onchange="islastline()"></td></tr> <tr><td><input type="text" onchange="islastline()"></td></tr> </table> この場合一番下のテキストボックスに入力したときだけTRUEを返してほしいのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

#1です。 ちょっとまずかったので訂正。(thisを渡すのは同じ) function islastline(obj){ var Tr = obj.parentNode.parentNode; var Table = Tr.parentNode.parentNode; return (Table.rows.length == Tr.rowIndex +1); }

sinkan
質問者

お礼

素早い回答ありがとうございました。 実はinnerHTMLでtableの行を増やそうとしたのですが、試行錯誤の結果tableにinnerHTMLを適用できないことがわかり、dlで代用しました。 そのため結果的には#1の方法を使わせていただきました。 また#1、#3の方法を元にNodeの概念などを学び非常に勉強になりました。

その他の回答 (2)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

最下行は、islastline(1)、その他は、islastline(0)としては駄目なのですか?

sinkan
質問者

お礼

静的なHTMLページならこれで充分だったのですが、動的に変化するページであったためなかなか難解でした。 最初の説明が不足だったかもしれませんね、申し訳ありません。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

とりあえずthisを渡すように変更して。 <tr><td><input type="text" onchange="islastline(this)"></td></tr> <tr><td><input type="text" onchange="islastline(this)"></td></tr> <tr><td><input type="text" onchange="islastline(this)"></td></tr> function islastline(obj){ if(obj.parentNode.panrentNode.nextSibling){ // inputの親(td)の親(tr)のnextSibling(次のtr)がnullでなければ最終行ではない。 return false; } else { return true; } }

関連するQ&A