• ベストアンサー

getElementByIdで謎のエラーが・・・

こんにちは。以前も同じ質問をさせていただいた者です。 http://oshiete1.goo.ne.jp/qa4199640.html getElementByIdでセルの背景色を変更するために document.getElementById(planId).style.backgroundColor="white"; というコードを書いたのですが、 document.getElementById(planId) is null というエラーが出てしまいます。しかしセルの塗りつぶしはできているという謎のエラーです。 ここからが以前より多少進展したところなのですが、どうやら原因はID名にあるようです。 実は、planIdは一つ以上の変数の内容と組み合わせて生成しています。 a=ABC; b=123; planId=a+String(b); の様にです。 ID名は動的なものでないと困るので、変数を使っていたのですがこういうやり方はできないのでしょうか? もしほかにいい方法があればご教授ください。よろしくお願いします。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

こんにちは getElementsByName()で、複数回目の参照以降にエラーが出るというのは体験したことがありますが、getElementById()は安定していると思います。(そのときはId参照に切替えました) ()内のid指定は変数でもOKです。 多分、Object.getElementById(id).property というような使い方をされているでしょうから、エラーが出る時のObject、id、propertyがそれぞれ正しくなっているかを再確認されてみてはいかがでしょう? a = document.getElementById(planId); のように分解しても、この行でエラーになるのあれば、そのときのplanIdの値が正しいか(IDとして存在している値か)を確認してみては?

kai1192
質問者

お礼

返信が遅くなりすみません。 ご指摘いただいた点を再確認しましたが,問題ありませんでした。 しかし,ID指定に変数が使えるとはっきりわかっただけでも収穫ありです。ありがとうございます。

その他の回答 (1)

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

気になったのですが、 > a=ABC; これは ABC という変数を a に代入していますよね。 文字列なら a = 'ABC'; ではないでしょうか。 ところで、ブラウザはなんでしょうか。 みたところ、FxもしくはGeckoエンジンを搭載したブラウザのようですが。 alert(planId); でちゃんと意図したIDになっているかと alert(document.getElementById); で、 document.getElementById が存在しているかを確認してください。

kai1192
質問者

お礼

返事が遅くなりすみません。 >これは ABC という変数を a に代入していますよね。 間違えました↓↓ご指摘ありがとうございます。 >ところで、ブラウザはなんでしょうか。 Firefoxです。 ご指摘いただいたとおり確認してみましたが問題ないようです。 たしかにそのあたりが怪しいとは思うのですが,原因がなかなかつかめません。 ご回答ありがとうございました。

関連するQ&A

  • .getElementById()のエラーについて

    IEで document.getElementById()はNullまたはオブジェクトではありません。 というエラーが出てしまいます。 document.getElementById()はNull、 document.getElementById()をオブジェクトにする とはどういうことでしょうか?

  • 【javascript】document.getElementByIdは一つしか使えないの?

    以下をhtmlをブラウザで見ると、文字列"aaa"は表示されますが、"bbb"は表示されません。 <html> <head> <SCRIPT LANGUAGE='JavaScript1.2'><!-- function init(){ document.getElementById("a").innerHTML="aaa"; document.getElementById("b").innerHTML="bbb"; } //--></script> </head> <body onload="init()"> <div id="a"></dev> <div id="b"></dev> </body> </html> ブラウザはIE,FFと試しましたが共に同じ結果でした。 FFのエラーコンソールには document.getElementById("b").innerHTML="bbb" is null のエラーメッセージが出てましたが、文法的に何が問題なのでしょうか?

  • getElementByIdを使用したグローバル変数の定義(使い方について) 

    グローバル変数の定義について教えてください。 getElementByIdを、グローバル変数で使用することはできないのでしょうか? 【グローバル変数(整数)】の場合 ------------------------------------------------- //グローバルで整数を定義 var a = 10; function test(){ alert(a.value); } 結果:「10」が表示される。 ------------------------------------------------- 【グローバル変数(getElementByIdを使用)の場合】 ------------------------------------------------- //グローバルでgetElementByIdで取得したオブジェクトを定義 var a = document.getElementById("objname"); function test(){ alert(a.value); } 結果:「null」 が表示される。 ※a = document.getElementById("objname"); でも同様。 ------------------------------------------------- 【ローカル変数(getElementByIdを使用)の場合】 ------------------------------------------------- function test(){ //ローカルでgetElementByIdで取得したオブジェクトを定義 var a = document.getElementById("objname"); alert(a.value); } 結果:「画面入力値」 が表示される。 ------------------------------------------------- このように getElementByIdで取得したオブジェクトを、 グローバル変数として扱った場合、nullとなるので困っています。 getElementByIdで取得したオブジェクトを、 グローバル変数として扱う良い方法はないでしょうか? 【環境】 OS:WindowsXP Pro 使用JavaScript:外部ファイルのjavaScript

  • JavaScriptのgetElementById以降の記述?

    ボタンをクリックすると表示内容とボタン色を変える、というJavaScriptを書き換えているところなのですが、 わからないことがあるので宜しくお願いします。 ※ボタンにはid名(id="tab0"、id="tab1"、id="tab2"、…といったふうに)が付けてあります。 ------------------------------------------------------------ 参考にしている書き換え前のJavaScriptの一部 ------------------------------------------------------------ function changeTab(n) { if ( n != tabNum && document.getElementById("tab"+n+"_content") ) { document.getElementById("tab"+tabNum).style.backgroundColor="#666"; document.getElementById("tab"+tabNum+"_content").style.display = "none"; document.getElementById("tab"+n).style.backgroundColor="#fff"; document.getElementById("tab"+n+"_content").style.display = "block"; tabNum = n; }} ------------------------------------------------------------ ボタン(<button type="button" id="tab0">)の代わりに 画像(<input type="image" id="tab0" src="xxx.gif">)にしたので、 クリックしたときに画像を別の画像に入れ替えるようにしたいのです。 「style.backgroundColor="#fff";」の部分を書き換えれば良いと思うのですが…。 説明不足の点などありましたら補足しますので宜しくお願いします。

  • getElementByIdの戻り値がnullになります。

    getElementByIdでdivタグのオブジェクトを取得したいのですが、nullとなってしまいます。 以下のコードのどこがいけないのでしょうか。 --- <div id='a'></div> <script language="javascript">// <!-- var a_ = document.getElementById('a'); document.write(a_); // --></script> ---

  • GetElementById の使い方(IE11)

    お世話になります。 html(5)内に、inputのhiddenに、複数のデータが設定されていまして、 そのデータをJavaScriptで取得し、alert表示したいのです。 例えば、 <input type="hidden" name="A0" id="A0" value="名称[1]"> <input type="hidden" name="A1" id="A1" value="名称[2]"> <input type="hidden" name="A2" id="A2" value="名称[3]"> を for(i=0;i<3;i++){ if( document.xxxform.GetElementById("A"+i) ){ data = document.xxxform.GetElementById("A"+i).value; str += data ; } } alert(str); のような感じにしたのですが、IE11でエラーになってしまいます。 if( document.xxxform.GetElementById("A"+i) ){ → ここでエラーのようです。 正しくはどのようにしたらよいのでしょうか? どなたか、アドバイスをお願いいたします。

  • document.getElementById

    document.getElementByIdでURLを変数に代入したいのですが うまくリンクになりません。 どこが間違っているのでしょうか? どうしたらよいのでしょうか? ソースはこちらです <!DOCTYPE html> <html lang="ja"> <head> <script language="JavaScript" type="text/javascript"> var url = 'http://www.goo.ne.jp/'; var urlgoo = document.getElementById("urlgoo").src = url; </script> </head> <body> <a id="urlgoo" title="sample">Link</a> </body> </html>

  • セルの背景色の取得ができない

    こんばんは。いつも利用させていただいてます。また皆さんのお知恵をお貸りに来ました。 親ウィンドウのテーブルのセルの背景色が白である場合、処理をさせるため以下のコードを書きました。 if(window.opener.document.getElementById(idNameS).style.backgroundColor == "white"){ myFlg=1; } これを実行するとFirebugで、 window.opener.document.getElementById(idNameS) is null というエラーが出てしまいます。ちなみに実行時のセルの背景色は全て白です。 いったい何がnullなのでしょうか。それからどのようにしたらエラーが出ずにうまく動くのでしょうか。 ご教授よろしく願いします。

  • getElementByIdの指定?

    <SPAN>タグにIDを指定して、getElementByIDで呼び出して、<SPAN>タグが適用されているテキスト内容を書き換えたいのですが。 <SPAN>タグが同一フレーム内にあれば、 document.getElementById("idname").firstChild.nodeValue="書き換えるテキスト" で、変わるのですが。 書き換えたいIDを持つテキストが別のフレームにある場合、その指定方法がわかりません。 普通のフレーム指定なら、 documentで始める代わりに、parent.framename だと思ったので、やってみたのですが、どうもエラーが返ってきて動きません。 使っているブラウザはインターネットエクスプローラ5とネットスケープ6です。 どなたかわかる方、教えてください。 よろしくお願いします。

  • オブジェクトがありませんのエラー

    過去ログを呼んで近いのがあったのでよく読んだのですが よくわかりませんので書き込みします。 以下のスクリプトで「オブジェクトがありませんのエラーが発生します。3行目のfor文の「obj.childNodes」でエラーが発生します。 「document.getElementById」が「null」であるのが原因のようですが、なぜ「document.getElementById」に値が入らないのかがつかめません。 お手数ですがよろしくお願いします 【script】 --------------------------------------------- if(document.getElementById && document.all && !navigator.userAgent.match(/Opera/)){ var obj = document.getElementById("mainmenu"); for(var i=0;i<obj.childNodes.length;i++){ if(obj.childNodes[i].className=="pullmenu"){ obj.childNodes[i].onmouseover = function(){pull(this) }; obj.childNodes[i].onmouseout = function(){pull(this) }; } } } --------------------------------------------- 【html】 --------------------------------------------- <ul id="mainmenu"> <li id="Begginer" class="pullmenu"><a href="http://www.○○○.co.jp/b/w.php">○○○</a> <ul> <li><a href="http://www.○○○.co.jp/b/w.php">○○○ </a></li> <li><a href="http://www.○○○.co.jp/b/s.php">○○○ </a></li> <li><a href="http://www.○○○.co.jp/b/m.php">○○○ </a></li> </ul> </li> </ul>