アプリ版:「スタンプのみでお礼する」機能のリリースについて

グローバル変数の定義について教えてください。
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

A 回答 (3件)

受取変数がグローバルかどうかが問題では無くて、getElementById の実行が早すぎるのが原因でうまくいかないのは無いでしょうか。

つまり、その ID のタグがまだ誕生していないタイミングで getElementById を発行しても null で当然という訳です。

例えば、以下にすればどうでしょう?

【グローバル変数(getElementByIdを使用)の場合】
-------------------------------------------------
// グローバル変数の定義
var a;

function onLoad() { // BODYタグの onload で実行される関数
//グローバル変数に getElementById で取得したオブジェクトを代入
a = document.getElementById("objname");
}

function test(){
alert(a.value);
}
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。

ご指南いただいた方法で試してみたところ、
正常に取得できました。とても助かります。

【前回の状態】
1.Bodyの内容が読み込まれていない(つまり、オブジェクトが誕生していない)状態がある。
2.getElementById で「Body内容のオブジェクトの取得指示を出す」
3.Bodyが生成されていない状態で取得指示を出しているため、nullを返した。

【対応後の状態】
1.ページがロードされた後(onLoad)後に「変数宣言する」に設定。
2.getElementById で「Body内容のオブジェクトの取得指示を出す」
3.ページがロードされた(=オブジェクトが存在している状態)でgetElementById をしようしたため、正常に取得が完了。

お礼日時:2009/07/20 16:19

ほぼ#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">
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

ご指南いただきました、
window.onloadを実装させていただきました。

こういう方法があるの知らなかったもので、
とても参考になりました。

どうもありがとうございました。

お礼日時:2009/07/20 16:21

スクリプトを、うしろにおく!(</body>のちょくぜん)


var a = document.getElementById("objname");
が<head>~</head>ないにあると、それがじっこうされたとき
まだそのようそが、そんざいしてないから
    • good
    • 1
この回答へのお礼

どうも、ありがとうございます。
ちょっと試してみたのですが、上手くいきませんでした。汗
(指定の仕方が悪かったのかもしれませんが(--;)

たしかに無いものに対して「取得しにいこうとしていた」のですから、
無い(null)のは当然だったということですね(--;

参考なります。
ありがとうございます。

お礼日時:2009/07/20 16:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!