• 締切済み

nullまたはオブジェクトではありません

どなたかよろしくお願いします。 以下のスクリプトで動作確認中にエラーが表示されます。 13行目「'src'はnullまたはオブジェクトではありません」とでます どうやって直したら良いのかわかりません。 IEの「スクリプトのエラーを表示しない」をすれば 一応希望通りに動くので、問題ないとは思うのですが気になります。 どうすれば解消できるでしょうか。 function setLinkListener () { var links = document.links; for (var i = 0; i < links.length; i++) { var link = links [i]; if (link.linkees) { link.onmouseover = function () { for (var i = 0; i < this.linkees.length; i++) { var linkee = this.linkees [i]; // changePseudoLinkClassName (linkee); if (linkee.tagName == "IMG") changeImage (linkee, linkee.src.replace ("_over.gif", ".gif").replace (".gif", "_over.gif")); if (linkee.tagName == "TD") { var image = linkee.getElementsByTagName ("img")[2]; changeImage (image, image.src.replace ("_over.gif", ".gif").replace (".gif", "_over.gif")); } } }; link.onmouseout = function () { for (var i = 0; i < this.linkees.length; i++) { var linkee = this.linkees [i]; // restorePseudoLinkClassName (linkee); if (linkee.tagName == "IMG") restoreImage (linkee); if (linkee.tagName == "TD") restoreImage (linkee.getElementsByTagName ("img")[2]); } }; } } }

みんなの回答

  • oka5130
  • ベストアンサー率66% (35/53)
回答No.1

失礼ですが、上記の質問ではわからないことばかりです。 ・linkees とは何でしょう? ・タグの構造はどうなっているのでしょう? (linkee.getElementsByTagName ("img")[2] がおかしいんでしょうが、  imgタグが3つあるのかどうかわかりません。  tdタグがどう関係しているのかもわかりません。) ・13行目は changeImage(image, ...); の行でよろしいでしょうか? あと、 > IEの「スクリプトのエラーを表示しない」をすれば > 一応希望通りに動くので、問題ないとは思うのですが気になります。 ですが、IEの設定はクライアント依存なので、ご自分で確認なさる分には問題ありませんが、 スクリプトのエラーを表示する設定にしている人を無視することになってしまいますので、 JavaScriptにエラーがあることは問題だと思います。

matsuriri
質問者

お礼

質問の仕方がわかり難くて申し訳ございません。 ご指摘受けたことを踏まえて、もう一度自分で考え直してみますので 一度締め切ります。 気軽に質問したわけではないのですが、結果的にお騒がせ質問のように なってしまい、申し訳ございません。 あと「スクリプトエラーの表示をしない」については oka5130さんのおっしゃる通りだと思うのですが このOKWaveを表示するときや他サイトを開くときもよく出るので ひょっとして、そっちが現在の"常識"なのかと思い 念のために書いただけで、私もやはり問題だと思っています。 回答本当にどうもありがとうございました。

関連するQ&A

  • オブジェクトの番号

    お世話になります。 JavaScriptでオブジェクトプロパティを取得する。 例えば var obj=document.getElementsByTagName("*"); var len = obj.length; for (var i=0;i<len;i++){   if(obj[i].tagName.match(img)){   ・・・・・・ このときiに入る値は、そのオブジェクトの番号が入っていると思うのですが、 この番号自体のみをあるオブジェクトから取得することはできないものなのでしょうか。 具体的に <img src="・・・" onclick="getObjNo(this)"> function getObjNo(obj){  var objNo=?????  //ここで、imgオブジェクトの番号を取得したいのですが。その方法がわかりません。 } よろしくお願いいたします。

  • スマートな外部javaでロールオーバーのマウスポインタを変えるには?

    お世話になります。 スマートな外部javaでロールオーバーさせましたが、マウスポインタが矢印のままで指に変わりません。どうしたらよいのでしょうか? 【参照元】 http://blog.bluebox.in/2006/10/javascriptcsstarget_blank.html ドリームウィーバーなどでも簡単にマウスオーバー効果をつけることが出来ますが、img要素内にスクリプトを呼び出すコードが入ってしまうのであまりスマートではありません。 この、英語のサイトで紹介されている方法だと、img要素にclass="imgover"というクラスをつければ、src属性で指定したファイルのファイル名に_oを足した名前の画像を読み込んで表示してくれるというJavaScriptです。 /* Standards Compliant Rollover Script Author : Daniel Nolan http://www.bleedingego.co.uk/webdev.php */ function initRollovers() { if (!document.getElementById) return var aPreLoad = new Array(); var sTempSrc; var aImages = document.getElementsByTagName('img'); for (var i = 0; i < aImages.length; i++) { if (aImages[i].className == 'imgover') { var src = aImages[i].getAttribute('src'); var ftype = src.substring(src.lastIndexOf('.'), src.length); var hsrc = src.replace(ftype, '_o'+ftype); aImages[i].setAttribute('hsrc', hsrc); aPreLoad[i] = new Image(); aPreLoad[i].src = hsrc; aImages[i].onmouseover = function() { sTempSrc = this.getAttribute('src'); this.setAttribute('src', this.getAttribute('hsrc')); } aImages[i].onmouseout = function() { if (!sTempSrc) sTempSrc = this.getAttribute('src').replace('_o'+ftype, ftype); this.setAttribute('src', sTempSrc); } } } } window.onload = initRollovers;

  • 画像を変えるスクリプト

    <HTML> <HEAD> <TITLE></TITLE> <SCRIPT language="JavaScript"> <!-- img=new Array(); for(i=1;i<=4;i++){ img[i]=new Image(); img[i].src="img"+i+".gif"; } function changeImage(i,j){ document.images[i].src=img[j].src; } // --> </SCRIPT> </HEAD> <BODY> <CENTER> <A href="#" onMouseOver="changeImage(0,2)" onMouseOut="changeImage(0,1)"><IMG src="img1.gif" border=0></A><BR> <BR> <A href="#" onMouseOver="changeImage(1,4)" onMouseOut="changeImage(1,3)"><IMG src="img3.gif" border=0></A> </CENTER> </BODY> </HTML> マウスオーバーしたら画像が変わるスクリプトです。 質問ですがこのスクリプトでどうしてオブジェクトを作っているのでしょうか? 普通にsrcプロパティを変更するだけではだめなのでしょうか?例えばdocument.images[i].src="img"+j+".gif"のようにしてiとjを変えるような 感じです。

  • リンクにマウスポインタをおくと画像切り替え

    リンクにマウスポインタをおくと画像を切り替えるソース(以下)をfreeのJavaScriptサイトからもってきて解読しています。よろしくお願いします。 <質問> ・gotolink=urlは、varなしの変数でChangeimage関数の引数urlを代入している? window.location=gotolink、var gotolink="#"との関係は? ・var gotolink="#"の#の意味は? ・this.hrefとあるが、thisは何を指す? ・"javascript:warp()"の意味は? ・<script></script>、<script language="JavaScript1.1"></script>はscript定義が2つに分割されているが正しい記述か? ---スクリプト--- <script> function changeimage(towhat,url){ if (document.images){ document.images.targetimage.src=towhat.src gotolink=url } } function warp(){ window.location=gotolink } </script> <script language="JavaScript1.1"> var myimages=new Array() var gotolink="#" function preloadimages(){ for (i=0;i<preloadimages.arguments.length;i++){ myimages[i]=new Image() myimages[i].src=preloadimages.arguments[i] } } preloadimages("plane1.gif","plane2.gif","plane3.gif","plane4.gif","plane5.gif") </script> <table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <p><a href="b2.htm" onMouseover="changeimage(myimages[0],this.href)">Plane 1</a></p> ☆中略☆ <a href="javascript:warp()"><img src="plane0.gif" name="targetimage" border=0></a> </td> </tr> </table>

  • ロールオーバー時の画像切り替えについて

    複数の画像ボタンを配置し、 ロールオーバーするとある位置に配置している画像を切り替えるようにしているのですが、 現状だとロールアウト後に初めの画像、初期値に戻ってしまうので 一番最後にロールオーバーした画像でストップさせたいと思っています。 現状、下記スクリプトを設置しているのですが お分かりの方が追われましたらご教授頂けないでしょうか。 どうぞ宜しくお願いします! MultiRollover = function(_listener) { this.listener_id = _listener; this.target_id = ""; this.sources = []; } MultiRollover.prototype = { addTarget: function(_target) { this.target_id = _target; }, addSource: function() { for(var i=0; i<arguments.length; i++) { this.sources.push(arguments[i]); } }, create: function() { var listener = document.getElementById(this.listener_id); if(document.getElementById(this.target_id)) { var out_target = document.getElementById(this.target_id); var over_targets = out_target.getElementsByTagName("a"); } for(var i=0; i<over_targets.length; i++) { var over_target = over_targets[i]; var src = this.sources[i]; var callback = (function(_src) { return function() { this.src = _src; }; })(src); this.observe(over_target, "mouseover", listener, callback); (new Image).src = src; src = this.sources[0]; callback = function() { this.src = src; }; this.observe(over_target, "mouseout", listener, callback); } }, observe: function(_el, _func, _listener, _callback) { if(_el.addEventListener) { _el.addEventListener(_func, function(e) { _callback.call(_listener, e); }, false); } else if(_el.attachEvent) { _el.attachEvent("on"+_func, function(e) { _callback.call(_listener, e); }); } } }

  • ローカルでは問題なく動くがサーバーにupするとおかしくなるロールオーバー

    会社のhpを作成中です。 ロールオーバーをしたいという事で、メニューをjsでロールオーバーさせる事にしました。 javascriptは初心者です。 本を見て、コードを打ちました。 が、PC上では問題なく動くのですが、サーバーに乗せるとおかしくなります。 リストにマウスを乗せた状態にするとaltのテキストが表示されてしまうのです。 色々調べてみましたが、どうしても分かりません。 分かる方がおられたら是非教えてください。 xhmtl <ul id="nav"> <li><a href="news.html"><img src="image/news.gif" class="Hover" alt="更新情報" width="255" height="34" /></a></li> <li><a href="profile.html"><img src="image/profile.gif" class="Hover" alt="会社概要" width="255" height="34" /></a></li> <li><a href="works.html"><img src="image/works.gif" class="Hover" alt="営業種目" width="255" height="34" /></a></li> <li><a href="staff.html"><img src="image/staff.gif" class="Hover" alt="スタッフ" width="255" height="34" /></a></li> <li><a href="office.html"><img src="image/office.gif" class="Hover" alt="営業所" width="255" height="34" /></a></li> <li><a href="extra.html"><img src="image/extra_over.gif" class="Hover" alt="臨時情報" width="255" height="34" /></a></li> </ul> js //p = console.log; window.onload = function(){ var conf = { className : 'Hover', postfix : '_over' }; var imgNodeList = getElementsByClassName(conf.className); var node; for (var i=0, len=imgNodeList.length; i<len; i++) { node = imgNodeList[i]; node.originalSrc = node.src; node.rolloverSrc = node.originalSrc.replace(/(\.gif|\.jpg|\.png)/, conf.postfix+"$1"); preloadImage(node.rolloverSrc); node.onmouseover = function(){ this.src = this.rolloverSrc; }; node.onmouseout = function(){ this.src = this.originalSrc; }; } }; //クラス名によるエレメントノード配列取得 function getElementsByClassName(name){ var elements = []; var allElements = document.getElementsByTagName('*'); for (var i=0, len=allElements.length; i<len; i++) { if (allElements[i].className == name){ elements.push(allElements[i]); } } return elements; } //プリロード preloadedImages = []; function preloadImage(url){ var p = preloadedImages; var l = p.length; p[l] = new Image(); p[l].src = url; }

  • ロールオーバーについて

    ロールオーバーをシンプルなjavascriptで実装するとの事でとあるサイトにて、以下のようなスクリプトがありました。 http://css-happylife.com/archives/2007/0621_0010.php ▼▼▼スクリプト▼▼▼ function smartRollover() { if(document.getElementsByTagName) { var images = document.getElementsByTagName("img"); for(var i=0; i < images.length; i++) { if(images[i].getAttribute("src").match("_off.")) { images[i].onmouseover = function() { this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on.")); } images[i].onmouseout = function() { this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off.")); } } } } } if(window.addEventListener) { window.addEventListener("load", smartRollover, false); } else if(window.attachEvent) { window.attachEvent("onload", smartRollover); } ▲▲▲スクリプト▲▲▲ DOMを使ってimgのソースを 画像「_off.」から「_on.」に書き換えているんだなということまではわかるのですが、 if(document.getElementsByTagName) とか、 if(window.addEventListener) 等の記述があります。 ifのあとの()の中身は i>0 や (i>5)&&(i<=10) 等、演算子を用いた条件を記述するタイプした目にしたことがないのですが、 これはどういった事を表しているのでしょうか? ご教授お願いいたします。

  • 【javascript】ロールオーバーと画像自動切換えがバッティングし

    【javascript】ロールオーバーと画像自動切換えがバッティングして、ロールオーバーがきいていません。 javascriptは該当の動作がどれかというのが分かる程度で、書く事も修正する事もできません。 ロールオーバーが正常に動いていたページに画像自動切換えのスクリプトを設置したところ、ロールオーバーが動かなくなりました。 ページの遷移に問題はないのですが、他ページでは出来ているので何とかしたいと思っています。どうかお助け下さい。 ≪ロールオーバー≫ function initRollovers() { if (!document.getElementById) return var aPreLoad = new Array(); var sTempSrc; var aImages = document.getElementsByTagName('img'); for (var i = 0; i < aImages.length; i++) { if (aImages[i].className == 'imgover') { var src = aImages[i].getAttribute('src'); var ftype = src.substring(src.lastIndexOf('.'), src.length); var hsrc = src.replace(ftype, '_o'+ftype); aImages[i].setAttribute('hsrc', hsrc); aPreLoad[i] = new Image(); aPreLoad[i].src = hsrc; aImages[i].onmouseover = function() { sTempSrc = this.getAttribute('src'); this.setAttribute('src', this.getAttribute('hsrc')); } aImages[i].onmouseout = function() { if (!sTempSrc) sTempSrc = this.getAttribute('src').replace('_o'+ftype, ftype); this.setAttribute('src', sTempSrc); } } } } ≪画像切り替え≫ window.onload = function(){ var num = 1; setInterval(function(){ document.getElementById('link' + num).style.display = 'none'; num = document.getElementById('link' + (num+1))? ++num : 1; document.getElementById('link' + num).style.display = 'block'; },7500); }

  • smartRolloverのカスタマイズについて

    smartRollover.jsを使っています。 ロールオーバー時に 〇〇_off.jpg が〇〇 _on.jpgに画像ファイル名が変更されるようになっています。 今は、〇〇_off.jpg にロールオーバー時に〇〇_on.jpgという 画像ファイルがない場合、何も画像が表示されません。 それを〇〇_off.jpgにロールオーバーしたときに〇〇 _on.jpgの画像がない場合に、ファイル名を変更させない(〇〇_off.jpgをそのまま表示する)ようにしたいのですが、どのようにすれば良いでしょうか? よろしくおねがいいたします。 ■smartRollover.js ------------------------- function smartRollover() { if(document.getElementsByTagName) { var images = document.getElementsByTagName("img"); for(var i=0; i < images.length; i++) { if(images[i].getAttribute("src").match("_off.")) { images[i].onmouseover = function() { this.setAttribute("src", this.getAttribute("src").replace("_off.", "_on.")); } images[i].onmouseout = function() { this.setAttribute("src", this.getAttribute("src").replace("_on.", "_off.")); } } } } } if(window.addEventListener) { window.addEventListener("load", smartRollover, false); } else if(window.attachEvent) { window.attachEvent("onload", smartRollover); } --------------------------

  • javascriptについて

    現在HPを作成していてjavaのプルダウンメニューを設置していますが 最初からメニューが開いた状態になります。ちなみにsdmenu.jsを使用しています。 最初開いた時にメニューが閉じるようにできますでしょうか? function SDMenu(id) { if (!document.getElementById || !document.getElementsByTagName) return false; this.menu = document.getElementById(id); this.submenus = this.menu.getElementsByTagName("div"); this.remember = true; this.speed = 4; this.markCurrent = true; this.oneSmOnly = false; } SDMenu.prototype.init = function() { var mainInstance = this; for (var i = 0; i < this.submenus.length; i++) this.submenus[i].getElementsByTagName("span")[0].onclick = function() { mainInstance.toggleMenu(this.parentNode); }; if (this.markCurrent) { var links = this.menu.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) if (links[i].href == document.location.href) { links[i].className = "current"; break; } } if (this.remember) { var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)"); var match = regex.exec(document.cookie); if (match) { var states = match[1].split(""); for (var i = 0; i < states.length; i++) this.submenus[i].className = (states[i] == 0 ? "collapsed" : ""); } } }; SDMenu.prototype.toggleMenu = function(submenu) { if (submenu.className == "collapsed") this.expandMenu(submenu); else this.collapseMenu(submenu); }; SDMenu.prototype.expandMenu = function(submenu) { var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight; var links = submenu.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) fullHeight += links[i].offsetHeight; var moveBy = Math.round(this.speed * links.length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight + moveBy; if (newHeight < fullHeight) submenu.style.height = newHeight + "px"; else { clearInterval(intId); submenu.style.height = ""; submenu.className = ""; mainInstance.memorize(); } }, 30); this.collapseOthers(submenu); }; SDMenu.prototype.collapseMenu = function(submenu) { var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight; var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length); var mainInstance = this; var intId = setInterval(function() { var curHeight = submenu.offsetHeight; var newHeight = curHeight - moveBy; if (newHeight > minHeight) submenu.style.height = newHeight + "px"; else { clearInterval(intId); submenu.style.height = ""; submenu.className = "collapsed"; mainInstance.memorize(); } }, 30); }; SDMenu.prototype.collapseOthers = function(submenu) { if (this.oneSmOnly) { for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed") this.collapseMenu(this.submenus[i]); } }; SDMenu.prototype.expandAll = function() { var oldOneSmOnly = this.oneSmOnly; this.oneSmOnly = false; for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i].className == "collapsed") this.expandMenu(this.submenus[i]); this.oneSmOnly = oldOneSmOnly; }; SDMenu.prototype.collapseAll = function() { for (var i = 0; i < this.submenus.length; i++) if (this.submenus[i].className != "collapsed") this.collapseMenu(this.submenus[i]); }; SDMenu.prototype.memorize = function() { if (this.remember) { var states = new Array(); for (var i = 0; i < this.submenus.length; i++) states.push(this.submenus[i].className == "collapsed" ? 0 : 1); var d = new Date(); d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000)); } };

専門家に質問してみよう