- ベストアンサー
テーブルの最後の行であるか判別したい
テーブルの中にあるテキストボックスの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を返してほしいのです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 ちょっとまずかったので訂正。(thisを渡すのは同じ) function islastline(obj){ var Tr = obj.parentNode.parentNode; var Table = Tr.parentNode.parentNode; return (Table.rows.length == Tr.rowIndex +1); }
その他の回答 (2)
- kokorone
- ベストアンサー率38% (417/1093)
最下行は、islastline(1)、その他は、islastline(0)としては駄目なのですか?
お礼
静的なHTMLページならこれで充分だったのですが、動的に変化するページであったためなかなか難解でした。 最初の説明が不足だったかもしれませんね、申し訳ありません。
- steel_gray
- ベストアンサー率66% (1052/1578)
とりあえず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; } }
お礼
素早い回答ありがとうございました。 実はinnerHTMLでtableの行を増やそうとしたのですが、試行錯誤の結果tableにinnerHTMLを適用できないことがわかり、dlで代用しました。 そのため結果的には#1の方法を使わせていただきました。 また#1、#3の方法を元にNodeの概念などを学び非常に勉強になりました。