プロが教えるわが家の防犯対策術!

IEで
document.getElementById()はNullまたはオブジェクトではありません。
というエラーが出てしまいます。

document.getElementById()はNull、
document.getElementById()をオブジェクトにする
とはどういうことでしょうか?

A 回答 (2件)

独学でWEBサイトを作成している者です。


No,1さんの回答がまさに正論ですがわかりにくいかもしれないので例を書きます。
document.getElementById('link')
という物を設定するにはHTMLソースに
<div id="link">
という物が無いといけません。
このHTML上でのidに対して作用するプログラムという事です。
    • good
    • 0
この回答へのお礼

setTimeout('document.getElementById('+'"'+sample+'"'+').innerHTML = ""',1000);
//-->
</script>
</head>
<body>
<div id="sample"></div>

これを

setTimeout('document.getElementById("sample").innerHTML = ""',1000);
//-->
</script>
</head>
<body>
<div id="sample"></div>

としたらエラーがなくなりました。

document.images[img].srcのばあいは、
setTimeout('document.images['+img+'].src',1000);
としないといけないので混同してしまいました。

ID名は文字列としてOK、imgは変数だからNGということなんですね。

お礼日時:2011/05/07 17:46

指定されたIDを持つエレメントがドキュメント内に存在しないということでしょう。

    • good
    • 0
この回答へのお礼

setTimeout('document.getElementById('+'"'+sample+'"'+').innerHTML = ""',1000);
//-->
</script>
</head>
<body>
<div id="sample"></div>

これを

setTimeout('document.getElementById("sample").innerHTML = ""',1000);
//-->
</script>
</head>
<body>
<div id="sample"></div>

としたらエラーがなくなりました。

document.images[img].srcのばあいは、
setTimeout('document.images['+img+'].src',1000);
としないといけないので混同してしまいました。

ID名は文字列としてOK、imgは変数だからNGということなんですね。

お礼日時:2011/05/07 17:47

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QgetElementByIdの戻り値がnullになります。

getElementByIdでdivタグのオブジェクトを取得したいのですが、nullとなってしまいます。
以下のコードのどこがいけないのでしょうか。
---
<div id='a'></div>

<script language="javascript">// <!--
var a_ = document.getElementById('a');
document.write(a_);
// --></script>
---

Aベストアンサー

さらに実験

<div id='a'></div>
<div></div>
<script type"text/javascript">// <!--
var a_ = document.getElementById('a');
document.write(a_);
// --></script>

これはnullですが

<div id='a'></div>
<div>あ</div>
<script type"text/javascript">// <!--
var a_ = document.getElementById('a');
document.write(a_);
// --></script>

これは[object]や[HTMLdivElement]が返りました。

QIE11 javascriptについて

すみません、IE11なってから、以下のjavascriptが動かなくなりました。
画像は、フェードイン、フェードアウトを繰り返し、画像はランダムに移動します。

全部のロジックを書いてしまいましたが、
何処がIE11から変更されたかが解らなくて、困っている所です。
何処を直すのか、全部聞くのもあつかましいと思いました、
どのあたりを見直しすれば宜しいですか。
教えて頂ければ幸いです。



<SCRIPT language="JavaScript">
<!--
var img = new Array();
img[0] = new Image(); img[0].src = "img/4031.jpg";
img[1] = new Image(); img[1].src = "img/4032.jpg";
img[2] = new Image(); img[2].src = "img/4031.jpg";
img[3] = new Image(); img[3].src = "img/4032.jpg";
img[4] = new Image(); img[4].src = "img/4031.jpg";

imgMaxSizeW = 171;
imgMaxSizeH = 141;
alphaTimer = 10;
stopTimer = 2000;
nextImgTimer = 1000;

_dom=(document.all?3:(document.getElementById?1:(document.layers?2:0)));

function getWindowSize() {
if(_dom == 1 || _dom == 2) {
win_width = self.innerWidth;
win_height = self.innerHeight;
}
if (_dom == 3) {
win_width = document.body.clientWidth;
win_height = document.body.clientHeight;
}
}

function showLayer(layerName){
if (_dom == 1) document.getElementById(layerName).style.visibility = "visible";
if (_dom == 2) document.layers[layerName].visibility = "show";
if (_dom == 3) document.all(layerName).style.visibility = "visible";
}

function hideLayer(layerName){
if (_dom == 1) document.getElementById(layerName).style.visibility = "hidden";
if (_dom == 2) document.layers[layerName].visibility = "hide";
if (_dom == 3) document.all(layerName).style.visibility = "hidden";
}

function writeHTML(layerName,html) {
if (_dom == 1) {
var div = document.getElementById(layerName);
while(div.hasChildNodes()) div.removeChild(div.lastChild);
var range=document.createRange();
range.selectNodeContents(div);
range.collapse(true);
var cf=range.createContextualFragment(html);
div.appendChild(cf);
}
if (_dom == 2) {
var div = document.layers[layerName];
div.document.open();
div.document.write(html);
div.document.close();
}
if (_dom == 3) document.all(layerName).innerHTML = html;
}

function moveLayerTo(layerName, x, y){
if (_dom == 1) {
document.getElementById(layerName).style.left = x + scrollX;
document.getElementById(layerName).style.top = y + scrollY;
}
if (_dom == 2) {
document.layers[layerName].left = x + pageXOffset;
document.layers[layerName].top = y + pageYOffset;
}
if (_dom == 3) {
document.all(layerName).style.pixelLeft = x + document.body.scrollLeft
document.all(layerName).style.pixelTop = y + document.body.scrollTop;
}
}

function changeAlpha(layerName) {
if (_dom == 3) {
if (alphaCount < 200) {
alphaCount += 2; op = alphaCount > 100 ? 100 - (alphaCount-100) : alphaCount;
document.all(layerName).filters["alpha"].opacity = op;
if (op == 100) {
tim = setTimeout("changeAlpha('"+layerName+"')", stopTimer);
} else {
tim = setTimeout("changeAlpha('"+layerName+"')", alphaTimer);
}
} else {
hideLayer(layerName);
clearTimeout(tim);
tim = setTimeout("setAlphaImgPos()",nextImgTimer);
}
} else {
setTimeout("setAlphaImgPos()",nextImgTimer*2);
}
}

var imgCount = 0;
function setAlphaImgPos() {
writeHTML("imgLay",'<IMG src="' + img[imgCount].src + '" border="0">');
imgCount++; if (imgCount >= img.length) imgCount = 0;
getWindowSize();
sX = Math.floor(Math.random()*(win_width-imgMaxSizeW-10));
sY = Math.floor(Math.random()*(win_height-imgMaxSizeH-10));
moveLayerTo("imgLay",sX,sY);
showLayer("imgLay");
alphaCount = 0;
changeAlpha("imgLay");
}

window.onload = setAlphaImgPos;

// -->
</SCRIPT>

すみません、IE11なってから、以下のjavascriptが動かなくなりました。
画像は、フェードイン、フェードアウトを繰り返し、画像はランダムに移動します。

全部のロジックを書いてしまいましたが、
何処がIE11から変更されたかが解らなくて、困っている所です。
何処を直すのか、全部聞くのもあつかましいと思いました、
どのあたりを見直しすれば宜しいですか。
教えて頂ければ幸いです。



<SCRIPT language="JavaScript">
<!--
var img = new Array();
img[0] = new Image(); img[0].src = "img/4031.jpg";
im...続きを読む

Aベストアンサー

他の HTML がわからないので適当に付け加えて開発者ツールで確認してみたのですが、moveLayerTo() の
if (_dom == 1) {
 document.getElementById(layerName).style.left = x + scrollX;
 document.getElementById(layerName).style.top = y + scrollY;
}
で scrollX は定義されていません と表示されます。というか、F12 を押すと開発者ツールが使えるので何らかの問題が起きたならこれで確認しましょう。

あと、透過度の設定を DX フィルターを使って行っているようですが、それも IE10 から使えなくなっています。
https://msdn.microsoft.com/ja-jp/library/ie/hh801215(v=vs.85).aspx
IE10 以降ではかわりに CSS の opacity を使ってください。
https://developer.mozilla.org/ja/docs/Web/CSS/opacity

他の HTML がわからないので適当に付け加えて開発者ツールで確認してみたのですが、moveLayerTo() の
if (_dom == 1) {
 document.getElementById(layerName).style.left = x + scrollX;
 document.getElementById(layerName).style.top = y + scrollY;
}
で scrollX は定義されていません と表示されます。というか、F12 を押すと開発者ツールが使えるので何らかの問題が起きたならこれで確認しましょう。

あと、透過度の設定を DX フィルターを使って行っているようですが、それも IE10 から使えなくなってい...続きを読む

QNull またはオブジェクトではありませんのエラー

HTML部で
<FORM NAME="frm1" METHOD="post" ACTION="xxx.html">
 <INPUT TYPE="hidden" NAME="txt1">
</FORM>

javascriptで
document.frm1.txt1.value = "hoge";
document.frm1.submit();

のように記述しています。
FireFoxブラウザでは期待通りの動きをするのですが、
IE6では「document.frm1.txt1はNullまたはオブジェクトではありません」
とエラーが出てしまい、画面遷移しません。

因みにページはフレームを利用しており、
フォームや画面遷移はメインフレームでしか使っていないので、
フレーム名も特につけておりませんし、
targetの記述も使用しておりません。
そこらへんに原因があるのでしょうか。
それにしてもFireFoxでは可、IEではエラー
というのも解せないです。

どなたか分かる方いらっしゃいましたら
ご教示願います。

HTML部で
<FORM NAME="frm1" METHOD="post" ACTION="xxx.html">
 <INPUT TYPE="hidden" NAME="txt1">
</FORM>

javascriptで
document.frm1.txt1.value = "hoge";
document.frm1.submit();

のように記述しています。
FireFoxブラウザでは期待通りの動きをするのですが、
IE6では「document.frm1.txt1はNullまたはオブジェクトではありません」
とエラーが出てしまい、画面遷移しません。

因みにページはフレームを利用しており、
フォームや画面遷移はメインフレームでしか使っていないので、
...続きを読む

Aベストアンサー

>document.frm1
alert(document.frm1);
これが何と出るか。
場合によってはこれも「document.forms[x];」系にしてみる

あと一応確認しておくけど
function(){}
じゃない限りはHTML上に書かれた順に実装される事になってる。
まさかformが現れる前に実行させてないよね?

QgetElementByIdで謎のエラーが・・・

こんにちは。以前も同じ質問をさせていただいた者です。
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名は動的なものでないと困るので、変数を使っていたのですがこういうやり方はできないのでしょうか?
もしほかにいい方法があればご教授ください。よろしくお願いします。

こんにちは。以前も同じ質問をさせていただいた者です。
http://oshiete1.goo.ne.jp/qa4199640.html

getElementByIdでセルの背景色を変更するために
document.getElementById(planId).style.backgroundColor="white";
というコードを書いたのですが、
document.getElementById(planId) is null
というエラーが出てしまいます。しかしセルの塗りつぶしはできているという謎のエラーです。

ここからが以前より多少進展したところなのですが、どうやら原因はID名にあるようです。
実は、planIdは一つ以上...続きを読む

Aベストアンサー

こんにちは

getElementsByName()で、複数回目の参照以降にエラーが出るというのは体験したことがありますが、getElementById()は安定していると思います。(そのときはId参照に切替えました)
()内のid指定は変数でもOKです。

多分、Object.getElementById(id).property というような使い方をされているでしょうから、エラーが出る時のObject、id、propertyがそれぞれ正しくなっているかを再確認されてみてはいかがでしょう?
a = document.getElementById(planId);
のように分解しても、この行でエラーになるのあれば、そのときのplanIdの値が正しいか(IDとして存在している値か)を確認してみては?

QgetElementsByNameで要素が取得できない

久々にJavaScriptを組みました。
以下のソースコードなんですが、ボタンクリック時にalertで「1」
が表示されるはずだと思っているのですが、「0」が返ってきます。
何かおかしなところはありますでしょうか?宜しくお願いします。

<html>
<head>
<script language="javascript">
function test(){
var obj = document.getElementsByName("name1");
alert(obj.length);
}
</script>
</head>
<body>
<div name="name1"></div>
<button onclick="test();">TEST</button>
</body>
</html>

Aベストアンサー

非常に珍しいIEの正しい挙動だと思う。
(Minefield,Opera,Safariは1を返す)

ずーっとあるもんだと思ってたが,
【div要素はname属性を持たない!】
http://www.w3.org/TR/REC-html40/index/attributes.html

BUTTON, TEXTAREA,APPLET,SELECT,FORM,FRAME,IFRAME,IMG,A,INPUT,OBJECT,MAP,PARAM,META
しか持たない。

もしname属性がdiv要素ではなくinput要素に付いていたら,
IEは1を返しました。

#つーことで,id属性を使いましょう。getElementsByIdを使えばおそらく似たようなことは出来るはずなので

Q「Nullまたはオブジェクトではありません」エラーが解決できません。

OS:Windows Vista Home Premium
ブラウザ:Sleipnir 2.8.0

を、使用しています。

Sleipnirの検索バーからYahooJapanを指定して検索を行うと
Internet Explorer スクリプトエラーが出ます。
YahooJapanのHPから普通に検索した場合は、エラーは出ません。

エラー内容:「'document.getElementById(...)'はNullまたはオブジェクトではありません。」
コード:0


下記の事は試してみましたが、変化がありませんでした。
---------------------------------------------------------------------------------------------------
「ツール」→「インターネットオプション」から・・・
詳細設定タブ
「スクリプトデバッカを使用しない」にチェックを入れる。
「スクリプトエラーごとにエラーを通知する」のチェックを外す。
全般タブ
「インターネット」グループにある「Cookieの削除」ボタンを押して「OK」
「ファイルの削除」ボタンを押して「全てのオフラインコンテンツを削除する」をチェックしてから「OK」
---------------------------------------------------------------------------------------------------

ご教授をよろしくお願いいたします。

OS:Windows Vista Home Premium
ブラウザ:Sleipnir 2.8.0

を、使用しています。

Sleipnirの検索バーからYahooJapanを指定して検索を行うと
Internet Explorer スクリプトエラーが出ます。
YahooJapanのHPから普通に検索した場合は、エラーは出ません。

エラー内容:「'document.getElementById(...)'はNullまたはオブジェクトではありません。」
コード:0


下記の事は試してみましたが、変化がありませんでした。
-------------------------------------------------------------------------...続きを読む

Aベストアンサー

>ヤフーのサイトがsleipnirに対応していないということでしょうか?
かなり前からsleipnirは使用しているんですけど、エラーが出るようになったのは最近なんです・・・。
出るようになったきっかけも分からないのですが

当方では問題がないので、質問者さんの環境が原因と思います。

同じような悩みを持っている方もいらっしゃるようですね。
http://q.hatena.ne.jp/1177461269

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

QVBS実行時エラー オブジェクトがありません 回避方法について

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだとは思うのですが、何が原因かがわからなく。。

○エラーメッセージ
エラー:オブジェクトがありません。:'objIE.Document.getElementByName(...)(...)'
コード:800A01A8
ソース:Microsoft VBScript 実行時エラー

○コード
'Option Explicit

Dim tmp 'CSV格納
Dim tmp2 'CSV分割
Dim SiteArray(10) 'ID,PW,URL格納
Dim SiteURL 'URL格納
Dim SiteID 'ID格納
Dim SitePW 'PW格納

Dim i
dim objFSO
dim stmCsvFile

'URL,ID,PWをCSVより読込
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set stmCsvFile = objFSO.OpenTextFile("C:\Users\***\Desktop\login.csv")

Do Until stmCsvFile.AtEndOfLine = True
tmp = stmCsvFile.readline
tmp2 = Split(tmp, ",")
SiteArray(i) = tmp2(1)
i = i + 1
Loop

stmcsvfile.Close


'URL,ID,PWを格納
SiteID = SiteArray(1)
SitePW = SiteArray(2)
SiteURL = SiteArray(0)

'---------- ひらく

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate SiteURL
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'---------- ID/PASSの入力

objIE.Document.getElementsByName("username")(0).Value = SiteID
objIE.Document.getElementsByName("password")(0).Value = SitePW

'---------- SUBMIT

objIE.Document.getElementsByName("login_form")(0).Submit
Do Until objIE.busy = False And objIE.readyState = 4 : Loop '待ち合わせ

'----------

宜しくお願い致します。

タイトルの件ですが、現在CSVよりIDとPWを読み込み、Webページに自動ログインできるVBSを作成しております。
ネットの情報を頼りに下記ソースを作成し、自動ログインできるところまでは達成しました。
しかしながら、一回目の実行時はいいのですが、二回目以降時間を置かずにVBSを起動すると
エラーが発生します。(IEは起動し、ログイン自体は出来ます)
本エラーの回避方法をご教授願えませんでしょうか。

エラーの発生場所は objIE.Document.getElementsByName("username")(0).Value = SiteID
あたりだ...続きを読む

Aベストアンサー

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるかどうかさえ確認できませんよね。
その辺りはどうなんでしょうか?それで、Length プロパティを調べるように書いたわけです。

ふつう、例えば、ここの「教えて!goo」なんかでも、IDとパスワードは、きちんと、[ID(uname, pass)]を持っています。そしてIDには、添字は存在しません。

VBAがあれば、VBEditorのローカルウィンドウで、そのプロパティを確認していただくしかないと思います。もしかしたら、最初からとれていないのかもしれません。

こんにちは。

>コメント頂いた箇所を下記の通り処理を変更しましたが現象はほぼ変わりませんでした。

#1で私の書いた、IsObjectは一般論ですが、個別の問題になるとかなり話は込み入ってしまうから、やめておいたことですが、なんといっても、VBSで、どのように開発しているかは分かりませんが、そのオブジェクトのプロパティとか、確認をして開発したのでしょうか。

>Set upw =objIE.Document.getElementsByName("password")
の時点で、upw を確認できない状態ですと、
upw(0) という「添字(index)」があるか...続きを読む

Qidを使わずにonclickで自身の要素取得

javascriptで
<a href="XXX.XXX" title="ゴール" onclick="element()">test</a>
function() {
idを使わずにここにtitle属性のゴールを習得する方法を記述したいのですが、わかりません
よろしくお願いします
}

Aベストアンサー

こんにちは。


==== HTML
<a href="" title="ゴール" onclick="getTitle(this);return false;">test</a>
<a href="" title="スタート" onclick="getTitle(this);return false;">test2</a>


==== JavaScript
function getTitle ( obj ) {
var title = obj.getAttribute('title');
alert ( title );
}

こういうことでしょうか。
違っていたらすみません。

Qテーブルタグの中にdivを含めてはダメ?

テーブルタグの中にdiv要素を入れるとダメなのでしょうか?
何か不都合でもあるのでしょうか?
何かご存知の方がいれば教えていただけませんか?

Aベストアンサー

以下、HTML 4.01での話です。(XHTMLでもほぼ同じだと思います)

tableタグ直下に書けるのは、caption,col,colgroup,head,tfoot,tbodyと定義されています。
特定の条件下でtbodyが省略できますので、実際はtrも書けます。これら以外は書けないことになっています。
tr直下にはth,tdが書けることになっています(それ以外は不可)。

th,tdの下にはブロック要素が書けるので、divも書けます。

このように、テーブル内でth,tdの中以外でdivが使えないのはHTMLの仕様でそう決まっているからです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング