グローバル変数の定義について教えてください。
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
No.2ベストアンサー
- 回答日時:
受取変数がグローバルかどうかが問題では無くて、getElementById の実行が早すぎるのが原因でうまくいかないのは無いでしょうか。
つまり、その ID のタグがまだ誕生していないタイミングで getElementById を発行しても null で当然という訳です。例えば、以下にすればどうでしょう?
【グローバル変数(getElementByIdを使用)の場合】
-------------------------------------------------
// グローバル変数の定義
var a;
function onLoad() { // BODYタグの onload で実行される関数
//グローバル変数に getElementById で取得したオブジェクトを代入
a = document.getElementById("objname");
}
function test(){
alert(a.value);
}
ご回答ありがとうございます。
ご指南いただいた方法で試してみたところ、
正常に取得できました。とても助かります。
【前回の状態】
1.Bodyの内容が読み込まれていない(つまり、オブジェクトが誕生していない)状態がある。
2.getElementById で「Body内容のオブジェクトの取得指示を出す」
3.Bodyが生成されていない状態で取得指示を出しているため、nullを返した。
【対応後の状態】
1.ページがロードされた後(onLoad)後に「変数宣言する」に設定。
2.getElementById で「Body内容のオブジェクトの取得指示を出す」
3.ページがロードされた(=オブジェクトが存在している状態)でgetElementById をしようしたため、正常に取得が完了。
No.3
- 回答日時:
ほぼ#2と同じですが、window.onloadを使うのがスマート
<script>
var a=Object();
window.onload=function(){
a = document.getElementById("objname");
test();
}
function test(){
alert(a.value);
}
</script>
<input type="text" value="xxx" id="objname">
ご回答ありがとうございます。
ご指南いただきました、
window.onloadを実装させていただきました。
こういう方法があるの知らなかったもので、
とても参考になりました。
どうもありがとうございました。
No.1
- 回答日時:
スクリプトを、うしろにおく!(</body>のちょくぜん)
var a = document.getElementById("objname");
が<head>~</head>ないにあると、それがじっこうされたとき
まだそのようそが、そんざいしてないから
どうも、ありがとうございます。
ちょっと試してみたのですが、上手くいきませんでした。汗
(指定の仕方が悪かったのかもしれませんが(--;)
たしかに無いものに対して「取得しにいこうとしていた」のですから、
無い(null)のは当然だったということですね(--;
参考なります。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
functionから別のfunctionを実...
-
jslintのエラーについて質問
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
jQueryの :not() .not() が有効...
-
getElementByIdを使用したグロ...
-
jQueryでzipを解凍読み込みする...
-
これも関数ですか?
-
yuga.js 外部リンクは別ウイン...
-
jquery 複数のメソッド
-
ランダム音声と正解・不正解(続)
-
R言語
-
JavaScript を使ってpkゲームを...
-
同じIDで定義した要素の配列を...
-
C#OpenCv V4にのエラーに関する...
-
<a>タグのテキストを取得
-
ActiveXobjectが作成できない
-
ジェネレーターの作り方
-
ASP.NET MVCでObjectをjsに渡す
-
window.openでタイトル名の指定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jQueryの :not() .not() が有効...
-
処理前の「お待ちください」
-
jslintのエラーについて質問
-
XMLHttpRequestでキャッシュを...
-
クリックすると上に開くアコー...
-
コードをスマートにさせたい。
-
関数名をテキストから読み込む...
-
jqueryの変数を関数の外に出す方法
-
シューティングゲームの作り方
-
要素名がスペースを含む場合のj...
-
getElementByIdを使用したグロ...
-
XMLHttpRequestオブジェクトが...
-
jQueryが読み込めない
-
Ajaxでデータベース(PostgreSQL)
-
setTimeoutで、止まらない
-
jQueryでzipを解凍読み込みする...
-
CDの曲をケータイのSDに移す
おすすめ情報