• ベストアンサー

DOMを使った、スクリプトを自分で組み立てたときまたは、ソース掲載サイ

DOMを使った、スクリプトを自分で組み立てたときまたは、ソース掲載サイトのスクリプトを、変数名やfunction名を変えて実行すると、document.getElementById("obj") is null という風になり、全くできません。 (objにはid名が入ります。) なぜでしょうか。

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

  • ベストアンサー
  • LOHA
  • ベストアンサー率52% (203/388)
回答No.2

おそらく、ドキュメントを読みこむ前に実行しているのでは? <script type="text/javascript"> // エラー var obj = document.getElementById("hoge"); </script> <body> <div id="hoge"></div> </body> よってwindow.onloadを利用する事になります。 window.onload = function() {  var obj = document.getElement... } が、onloadはひとつしか関数を割り当てられません。 よって最近では以下のようonloadイベントに関連付ける関数を指定するのが妥当でしょう。 function func() {  var obj = document.getElement... } if (window.addEventListener) {  // Firefox, Safari, その他もろもろ  window.addEventListener("load", func, false); } else if (window.attachEvent) {  // IEのみ  window.attachEvent("onload", func); } else {  // 念のため  window.onload = func; } 上記のようにブラウザ毎に処理を変える必要がありますので、個人的にはDOM操作やAjaxをするのであれば、prototype.jsやjQueryなどのクロスブラウザなライブラリを利用するのを強く推奨します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

is nullがどこからでてきたのかわかりませんが、typeofを チェックしてみては? <script> var ob=document.getElementById("obj"); if(typeof obj=="undefined") alert("no obj"); </script>

noname#128209
質問者

補足

typeofとはどのようなものですか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ソースが難しくて初心者にわかるようにどなたか教えて

    https://okwave.jp/qa/q9365480.html の続き 初心者なのでソースだけではわかりません。 もう少し具体的に何をやっているか教えていただければ幸いです。 >>> functionaddCR( obj ){ id=obj.id; strArray[ id - 0 ]+='\r\n'; alert(obj.parentNode.outerHTML) obj.innerHTML+='<br>'; } 恐らくここで、テキストをクリックしたとき、クリックした場所で改行されるようですが、もう少し初心者にわかるように解説いただけませんか? これは何を再代入しているのですか? id=obj.id; 変数A += 変数Bは、変数A = 変数B+変数Aなので、 配列になにかしているのですか? strArray[ id - 0 ]+='\r\n'; なぜこれでクリックしたところにbrがつくのでしょうか? obj.innerHTML+='<br>'; https://codepen.io/anon/pen/xLWmZv ソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>test</title> </head> <body> <textarea>ここに文章を入力してください</textarea> <button>表示</button> <button>出力</button> <textarea id="out" readonly></textarea> <div id="disp"></div> <script type="text/javascript"> varstrArray; functionaddCR( obj ){ id=obj.id; strArray[ id - 0 ]+='\r\n'; alert(obj.parentNode.outerHTML) obj.innerHTML+='<br>'; } functiondisp(){ var str=document.getElementsByTagName('textarea')[0].value; strArray=str.split(''); vardiv=document.getElementById('disp'); div.innerHTML=''; var aProto=document.createElement('a'); for( var i =0, len=strArray.length; i<len; i++ ){ vara=aProto.cloneNode(1); a.onclick=function(){ addCR(this); } a.innerText=strArray[ i ]; a.id=i div.appendChild(a); } } functionoutput(){ var outText=document.getElementsByTagName('textarea')[1]; outText.value=strArray.join("") } document.getElementsByTagName('Button')[0].onclick=function(){ disp() } document.getElementsByTagName('Button')[1].onclick=function(){ output() } </script> </body> </html>

  • ソースの初歩的な質問です

    スタートを押下したら、alertの"消します""出します"の通りに、 obj.gifが反応するようにするソースを作成したいです。 以下のソースでは対象オブジェクトが見つからないという エラーが返ってきてしまいます。 どの様に修正すればよいのか教えてください。 宜しくお願い致します。 <html> <head> <script type="text/JavaScript"> function Start(lyrball) { alert("消します"); document.getElementById(lyrball).style.visibility = "hidden"; alert("出します"); document.getElementById(lyrball).style.visibility = "visible"; } </script> </head> <body> <a href="JavaScript:Start()">スタート</a> <div id="lyrball"> <img src="obj.gif"> </div> </body> </html>

  • DOMで作ったラジオボタンが選択できない

    JavaScript DOM で作成したラジオボタンが選択できません。 Sleipnirの「選択部分のソースを表示」で確認したところ、 name属性だけがセットされていないようで、選択できない原因はそれだと思いますが、 セットできない理由が分かりません。 どなたか解決策を教えて頂けないでしょうか。 なお、下記の何れの方法でもダメなようです。 obj.name = "hogehoge" obj.setAttribute("name", "hogehoge"); 念のため、現象確認用のソースも貼っておきます。 <html> <head> <script type="text/javascript"> function create1() { var rObj = document.createElement("input"); rObj.type = "radio"; rObj.name = "rd"; rObj.value = 5; var divObj = document.getElementById("box"); divObj.appendChild(rObj); } function create2() { var rObj = document.createElement("input"); rObj.setAttribute("type", "radio"); rObj.setAttribute("name", "rd"); rObj.setAttribute("value", "3"); var divObj = document.getElementById("box"); divObj.appendChild(rObj); } </script> </head> <body> <input type="button" value="create1" onClick="create1()"> <input type="button" value="create2" onClick="create2()"> <div id="box"></div> </body> </html>

  • DOMでdocument.writeを該当部分に書き入れる

    DOMで指定したエレメント内にdocument.write()で排出される文字を挿入する必要があり、実装方法に困っております……。 こんな感じです。 <div id="test"></div> <script type="text/javascript"> function func01() { document.write("<strong>書き込むデータ</strong>"); } document.getElementById("test").innerHTML = func01(); </script> これを実行しますと、当然かもしれませんが単に"書き込むデータ"がテキストでブラウザに表示されてしまい、指定したidであるtestのセクション内に出力されません。 func01()では制約上どうしてもdocument.write()を使用する必要があり、何とかこの値を<div id="test"></div>の中に書き込めないかなという状態です。 どなたかアドバイスをお願いできれば幸いです。

  • メニューを変えたい

    こんにちは。メニューをつくったのですが、カテゴリーをクリックすると+がマイナスになり、サブカテゴリが現れ、サブカテゴリをクリックすると+に閉じてしまいます。 <script type="text/javascript"><!-- function oritatami(id,id2){ obj=(document.all)?document.all(id):((document.getElementById)?document.getElementById(id):null); if(obj) obj.style.display=(obj.style.display=="none")?"block":"none"; if(document.all){ with(document.all(id2)){innerText=(innerText=="+")?"-":"+";} } else if(document.getElementById){ with(document.getElementById(id2)){firstChild.nodeValue=(firstChild.nodeValue=="+")?"-":"+";} } } //--></script> これを下記の様に変更したいと思いますのでご教示お願い致します。 ●サブカテゴリをクリックしてもメインのカテゴリは閉じないで、マイナスのままで開いておき、閉じる時は又メインのマイナスのカテゴリをクリックすると全て閉じてプラスに戻る 説明が下手で申し訳ございませんが、理解して下さると助かります。

  • phpソースの中のjavascriptを実行する方法

    現在、AJAXの勉強をしているプログラミング初心者です。 環境はapache2,php5です。 phpのソースの中にjavascriptを埋め込んだものを動作させるには どうしたらよいのかが分かりません、 例えば以下の2つのファイルの場合。 abc.php↓ --------------------------------------------------------------- <html> <head></head> <body> <?php echo "こんにちわ"; ?> <script tyep="text/javascript"> alert("hello"); </script> </body> </html> --------------------------------------------------------------- abc.html↓ --------------------------------------------------------------- <html> <head> <script> try{ var obj= new ActiveXObject("Microsoft.XMLHTTP");} catch(e){var obj=new XMLHttpRequest();} function load(point){ obj.open("POST","abc.php",true); obj.send(null) obj.onreadystatechange=change; } function change(){ if(obj.readyState==4){ document.getElementById("target").innerHTML=obj.responseText; } } </script> </head> <body> <div id="target"></div> <a href="#" onclick="load();">click!</a> </body> </html> --------------------------------------------------------------- としたところ、 abc.phpを実行した場合はabc.phpのjavascriptが実行されてアラートがでるのですが、 abc.htmlからabc.phpにリクエストを出して出力された場合には、 javascriptが実行されずにアラートが出ない。 どうしてこのようになるのでしょうか? また解決策があれば教えてください。 よろしくお願いします。

  • 表示・非表示のスクリプトで、複数指定する場合はどうしたらいいですか?

    複数のコンテンツをボタンクリックにて表示・非表示にしたいのですが、うまくいきません。 なんとか、2つまではわかったのですが、3つまで表示すると3つ目が非表示になってくれません。 最終的には5つくらいを下記のスクリプトで行いたいのですが、どうすれば、複数のIDを対応させることができますか? ●例えば、test1を押した際、test2と3は非表示としたいです。 <script language="JavaScript" type="text/JavaScript"> <!-- function ChDsp2(strShow,strHidden){ var obj=''; obj=document.all && document.all(strShow) || document.getElementById && document.getElementById(strShow); obj.style.display = "block"; obj=document.all && document.all(strHidden) || document.getElementById && document.getElementById(strHidden); obj.style.display = "none"; } //--> </script> <a href="javascript:ChDsp2('text1','text2');">1を表示</a> <a href="javascript:ChDsp2('text2','text1');">2を表示</a> <a href="javascript:ChDsp2('text3','text1');">3を表示</a> <span id="text1" style="display:block;">111111</span> <span id="text2" style="display:none;">222222</span> <span id="text3" style="display:none;">333333</span> どなたか教えてください。お願いします。

  • javascriptとDOM

    javascriptを勉強中なのですが、 javascript形式とDOM形式の両方で、タグの操作が出来ると事を知りました。 例)threeは、imgのid名です。 javascript: 書き方:document.three.src="画像ファイル"; DOM : 書き方: document.getElementById('three').src="画像ファイル"; 質問1:一般的には、javascriptでタグを操作したりするとは、「DOM」「javascript」どちらの形式で javascriptを記述することが多いのでしょうか? 質問2:現在、DOMのほうが扱いやすいのかなと思ってはいるのですが、DOMの参考書を購入しようと考えた際、どのような参考書を買えばいいでしょうか。javascriptで使用することを考えています。 どなたかご教授いただけましたら幸いです。 よろしくお願いします。

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

    過去ログを呼んで近いのがあったのでよく読んだのですが よくわかりませんので書き込みします。 以下のスクリプトで「オブジェクトがありませんのエラーが発生します。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>

  • VBAからjavascriptに値を渡す

    VBAでIEを操作しております。 一部javascriptを使って以下のようなコードで、リンクをクリックしています。 ie.document.Script.setTimeout "javascript:document.getElementById(""ID"").click()}", 10 getElementById(""ID"")のID部分を変数にしたいのですが、 Dim ID as String ID=○○ ie.document.Script.setTimeout "javascript:document.getElementById(○○).click()}", 10 としてもうまく動きません。 javascriptの中身をfunctionにして、引数に○○を持っていっても動きませんでした。 どうすれば引数を渡すことができますか。 jscriptを使えばできそうな気がしたのですが、 js.CodeObject.関数名(引数)で渡せる引数が1つだけ?のようで こちらも頓挫しております。どうかご教示お願いします。