QA@IT
«回答へ戻る

回答を投稿

ブラウザはIEなので開発者ツールで確認したところGridViewではなくtableでした。

タイミングの問題で F12 開発者ツールでうまく見れないこともあるようです。

その table は ASP.NET が GridView から生成したもので(Grid.js が生成したものではなくて)、Grid.js による置き換えがうまく行っていれば、実際は存在していないはずです。(開発者ツールではうまく見れてないだけ)

質問者さんのコードでいうと、new Grid(...) の時点では table は存在しますが、function aaa() が動く時点では、table は new Grid(...) で生成された div 要素に置き換えられていて、実際には存在していないので、document.getElementById では取得できないということだと思います。

参考にされていた私のブログの「実験室」のリンク先のページを F12 開発者ツールで見ていただければ、GridView から生成された table は存在せず、div 要素で構成される全く別物に置き換えられているのが分かると思います。

なので直接TextBoxのidを指定し入力値を取得するようにしました。

document.getElementById で GridView から生成された table が取得できないにもかかわらず、GridView 内に配置した TextBox が取得できる(ように見える)のは、その TextBox から生成された input 要素が、id 等の属性を含めて、Grid.js が生成した div 要素の中にそのままコピーされるからです。

それで JavaScript は動くと思いますが、問題があるとすると、この先 GridView の Template に配置した TextBox の ClientID の命名規則が変わらないという保証がないということです。

命名規則は変わらないとしても、保守の際など何かの都合で TextBox の ID を変えると JavaScript のコードも書き換えなければならないという面倒なこともあります。

そういう問題を回避できるように、function aaa(own) の書き方を検討されることをお勧めします。(例えば、引数に ClientID を渡すなど)

> ブラウザはIEなので開発者ツールで確認したところGridViewではなくtableでした。

タイミングの問題で F12 開発者ツールでうまく見れないこともあるようです。

その table は ASP.NET が GridView から生成したもので(Grid.js が生成したものではなくて)、Grid.js による置き換えがうまく行っていれば、実際は存在していないはずです。(開発者ツールではうまく見れてないだけ)

質問者さんのコードでいうと、new Grid(...) の時点では table は存在しますが、function aaa() が動く時点では、table は new Grid(...) で生成された div 要素に置き換えられていて、実際には存在していないので、document.getElementById では取得できないということだと思います。 

参考にされていた私のブログの「実験室」のリンク先のページを F12 開発者ツールで見ていただければ、GridView から生成された table は存在せず、div 要素で構成される全く別物に置き換えられているのが分かると思います。



> なので直接TextBoxのidを指定し入力値を取得するようにしました。

document.getElementById で GridView から生成された table が取得できないにもかかわらず、GridView 内に配置した TextBox が取得できる(ように見える)のは、その TextBox から生成された input 要素が、id 等の属性を含めて、Grid.js が生成した div 要素の中にそのままコピーされるからです。

それで JavaScript は動くと思いますが、問題があるとすると、この先 GridView の Template に配置した TextBox の ClientID の命名規則が変わらないという保証がないということです。

命名規則は変わらないとしても、保守の際など何かの都合で TextBox の ID を変えると JavaScript のコードも書き換えなければならないという面倒なこともあります。

そういう問題を回避できるように、function aaa(own) の書き方を検討されることをお勧めします。(例えば、引数に ClientID を渡すなど)