目的地の座標がうまく取得されません

このQ&Aのポイント
  • 前の投稿後、なんとかプログラムを組んでみました。しかし、ターゲットとなるabcが<table>タグの中にあると、うまく座標が取得されません。解決策はあるのでしょうか?WindowsのIE6で動く様にしたいと思っております。
  • プログラムを組んで目的地の座標を取得しようとしていますが、<table>タグ内にあるabcの座標がうまく取得できません。WindowsのIE6で動作する解決策を教えてください。
  • abcの座標を取得するプログラムを組んでいますが、<table>タグの中にあると上手く取得できません。WindowsのIE6で動作させる方法を教えてください。
回答を見る
  • ベストアンサー

目的地の座標がうまく取得されません

お世話になります。 前の投稿後、なんとかプログラムを組んでみました。 しかし、ターゲットとなる <A id=abc name=abc>abc</a> が<table>タグの中にあると、うまく座標が取得されません。 <table>タグの外にあればうまく行きます。 解決策はあるのでしょうか? WindowsのIE6で動く様にしたいと思っております。 よろしくお願い致します。 ――――――――――――――――――――――――――――――――― <script> nowTop=0; function toScroll(AnchorID){ objAgent = navigator.userAgent.toUpperCase(); bro=(objAgent.indexOf("WIN") >= 0) ? true : false ; bro=(objAgent.indexOf("IE")>=0 && objAgent.indexOf("OPERA")<0) ? true : false ; if(bro){ nowTop=document.body.scrollTop; if(AnchorID){ pageScroll(document.all(AnchorID).offsetTop); }else{ pageScroll(0); } } } pageScrollTimer=""; beforTop=0; function pageScroll(DestinationTop){ nowTop+=Math.floor((DestinationTop-document.body.scrollTop)/10); window.scrollTo(0,nowTop); if((DestinationTop==document.body.scrollTop) || (beforTop==document.body.scrollTop)) { clearTimeout(pageScrollTimer); }else{ beforTop=document.body.scrollTop; pageScrollTimer = setTimeout("pageScroll("+DestinationTop+")",20); } } </script> <A onclick="toScroll('abc');return false;" href="#abc">abcへ</A> <table><tr><td> <A id=abc name=abc>abc</a> </table> ―――――――――――――――――――――――――――――――――

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1の具体的なサンプル <script> nowTop=0; function toScroll(AnchorID){ objAgent = navigator.userAgent.toUpperCase(); bro=(objAgent.indexOf("WIN") >= 0) ? true : false ; bro=(objAgent.indexOf("IE")>=0 && objAgent.indexOf("OPERA")<0) ? true : false ; if(bro){ nowTop=document.body.scrollTop; if(AnchorID){ pageScroll(absOffsetTop(AnchorID)); }else{ pageScroll(0); } } } pageScrollTimer=""; beforTop=0; function pageScroll(DestinationTop){ nowTop+=Math.floor((DestinationTop-document.body.scrollTop)/10); window.scrollTo(0,nowTop); if((DestinationTop==document.body.scrollTop) || (beforTop==document.body.scrollTop)) { clearTimeout(pageScrollTimer); }else{ beforTop=document.body.scrollTop; pageScrollTimer = setTimeout("pageScroll("+DestinationTop+")",20); } } function absOffsetTop(id){ var el=document.getElementById(id); if(el.offsetParent.tagName.toLowerCase()=="body") return el.offsetTop; else return absOffsetTopR(el); } function absOffsetTopR(el){ if(el.offsetParent.tagName.toLowerCase()=="body") return el.offsetTop; else return el.offsetTop+absOffsetTopR(el.offsetParent); } </script>

msi21st
質問者

お礼

ご回答有難う御座います。 早速やって見たら動きました!! みごと解決しました!! 解決策の具体的な説明からサンプルまで有難う御座います。 とても助かりました。 誠に有難う御座いました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

offsetTopは、その親の位置からの位置を表すから 親がbody(タグ)の場合は、そのまま使えるけど、 他のエレメントに入れ子になっている場合には、そのまま使えません。 とりあえず、offsetParentで親のエレメントを得ることができますので、 親がbodyになるまでたどってそれぞれのエレメントのoffsetTopを足し込む必要があります。 註: offsetParentの動作については、IE5以降と以前とでは動作が違う (5以降ではTDの親はTABLEになるが以前ではTRになる(多分、オフセット位置を得る上でTRになる必要がないから))ので、マイクロソフトのサイトの説明によると、parentElementを使うようにという注意書きがありますが、オフセット位置を求める場合(親のエレメントの階層は関係ないので)気にしなくていいと思います。

msi21st
質問者

お礼

ご回答有難う御座います。 具体的な解決策をアドバイス頂き、 さらに#2でサンプルまで書いて頂き有難う御座います。

関連するQ&A

  • NN系でマウス座標取得

    お世話になります。 javascriptにてマウス座標を取得するファンクションを作成したいと 考えております。 そこで以下のソースでも取得可能だと思うのですが NN系でイベントが走らない場合でもマウス座標を 取得するファンクションを作成したいです。 すごく簡単なのかもしれませんが、ご教授宜しくお願い致します。 function getMouseY(e){  if(document.all) return document.body.scrollTop+event.clientY else if(document.layers||document.getElementById) return e.pageY }

  • TABLEタグ内に入った項目の座標取得について

    オブジェクトの座標位置を取得する"offsetTop"はTABLEタグ内のものには使えないとありました。 (参考質問URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1556067) 参考URLの回答例を見ながら、簡単なソースを組んでみたのですが、結果が「0」となってしまい値がとれていません。 (TABLEタグにはいっていなければ取得できます) 何がいけなくてこうなってしまっているのかわからず、大変悩んでいます。 お分かりになられる方、ご教授お願いいたします。 (文字数制限の関係で、インデントがとれてません。みにくくてごめんなさい) <xmp> <html> <head> <script language="JavaScript" type="text/javascript"> <!-- function absOffsetTopR(el){ if(el.offsetParent.tagName.toLowerCase()=="body"){ return el.offsetTop; }else{ return el.offsetTop+absOffsetTopR(el.offsetParent); } } function absOffsetTop(id){ var el=document.getElementById(id); if(el.offsetParent.tagName.toLowerCase()=="body"){ return el.offsetTop; }else { return absOffsetTopR(el); } } //--> </script> </head> <body> <form name="fm_test"> <table name="testTable" border="1" width="150"> <tr> <td align="center"> <input type="text" size="20" name="testText"> <script language="JavaScript" type="text/javascript"> <!-- zahyo = absOffsetTop("testText"); document.fm_test.elements["testText"].value=zahyo; //--> </script> </td> </tr> </table> </form> </body> </html> </xmp>

  • SafariのIframeで高さが取得できません

    <script language="JavaScript"> <!-- function frame_check(){ if(main.document.body){ if(navigator.userAgent.indexOf("Opera") != -1){ // 文字列に「Opera」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("MSIE") != -1){ // 文字列に「MSIE」が含まれている場合 var f = main.document.body.scrollHeight; } else if(navigator.userAgent.indexOf("Firefox") != -1){ // 文字列に「Firefox」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Netscape") != -1){ // 文字列に「Netscape」が含まれている場合 var f = main.document.body.offsetHeight; } else if(navigator.userAgent.indexOf("Safari") != -1){ // 文字列に「Safari」が含まれている場合 var f = main.documentElement.offsetHeight; } if(f) document.getElementById("frame_set").height=f+20; setTimeout("frame_check()",100); }else{ setTimeout("frame_check()",100); } } setTimeout("frame_check()",10); --></script> <iframe name="main" id="frame_set" src="mainf.html" width="800" height="4000" frameborder="0" scrolling="no"></iframe> 上記のスクリプトを作成しましたが、IE7、 Firefoxではうまくいきますが、SafariではIframeに表示するページの高さが取得できません。 どこが問題なのかご教授お願いいたします。

  • マウスでスクロールした値を取得できない

    IE6.02を使っています。 マウスの座標を追いかけるプログラムで、 ブラウザを縦方向にスクロールしてもその座標を取得したいのですが、 なぜかdocument.body.scrollTopが0のままで追いかけてきませんでした。 次のどこがいけないのでしょうか? <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>sample</title> <script type="text/javascript"><!-- document.onmousemove=function(e){ if(document.all){ Myimg.style.pixelLeft=document.body.scrollLeft+event.x+15; Myimg.style.pixelTop=document.body.scrollTop+event.y+15; } else if(document.getElementById){ document.getElementById("Myimg").style.left=e.pageX+15; document.getElementById("Myimg").style.top=e.pageY+15; } } --></script> </head> <body> <span id="Myimg" style="position:absolute"><img src="gazou.gif"></span> a<br>←スクロールバーがでるように改行していく a<br> a<br> a<br> a<br> ・ ・ ・ </body> </html>

  • アラーと表示がうまくいきません

    <SCRIPT LANGUAGE="JavaScript"> <!-- function aaa(){ if(document.a.ADD01.selectedIndex==0){ alert("カテゴリを選んで下さい。");document.a.ADD01.focus();return false; }else if(document.a.EMAIL.value=="" &&document.a.TEL.value==""){ alert("メールアドレスか電話番を入力して下さい。"); document.a.EMAIL.focus(); return false; }else{ return true;} } // --> </SCRIPT> 上記の「メールアドレスか電話番号を入力して下さい。」のアラートを「メールアドレスを入力して下さい。」に変えたいのですが(document.a.EMAIL.value=="" && document.a.TEL.value=="")のどの部分までを消していいのか分かりません。

  • 別フレームの画像の操作について

    画像をクリックすると指定した所にある画像が その画像に変わるというタグを作ったのですが、 1つのフレーム内ではできるのですが 2つのフレームを使って、もう片方にある指定した 画像を変更する事ができなく、色々とサイトを見て みたのですがどうにもうまくいかず、質問させていただきます。 1つ目のフレームののタグは <SCRIPT language="JavaScript"> <!--HPB_SCRIPT_CODE_40 function _HpbImgSwap(imgName, imgSrc) { var appVer=parseInt(navigator.appVersion); var isNC=false,isN6=false,isIE=false; if (document.all && appVer >= 4) isIE=true; else if (document.getElementById && appVer > 4) isN6=true; else if (document.layers && appVer >= 4) isNC=true; if (isNC||isN6||isIE) { if (document.images) { var img = document.images[imgName]; if (!img) img = _HpbImgFind(document, imgName); if (img) img.src = imgSrc; } } } function _HpbImgFind(doc, imgName) { for (var i=0; i < doc.layers.length; i++) { var img = doc.layers[i].document.images[imgName]; if (!img) img = _HpbImgFind(doc.layers[i], imgName); if (img) return img; } return null; } //--> </SCRIPT> 続きは次のレスに(長くてすいません)

  • 【JavaScript】二重送信防止

    いつもお世話になっております。 JavaScriptの二重送信防止についてご教授ください。 現在、下記のJavaScriptを組んでいるのですが、うまく二重送信防止が効いていません。 どこか、おかしなコードがありますでしょうか? ちなみに、<html:text>タグ内でonkeypress="JavaScript:toEnter();"を指定…((1))、 <a href>内でonclick="JavaScript:toAdd();"を指定…((2))しているのですが、 テキストボックス内でエンターを押下した時((1))にうまく二重送信防止が効いていません。 宜しくお願い致します。 <script language="JavaScript"> <!-- var flgSubmit = false; function submitCheck() { if ( flgSubmit ) { return false; } else { flgSubmit = true; return true; } } function toEnter(){ if( submitCheck() ) { if(event.keyCode == 13) toAdd(); } } function toAdd() { if( submitCheck() ) { document.AddForm.submit(); } } //--> </script>

  • JavaScriptを外部ファイルにするとロールオーバーが機能しない

    ホームページビルダー11を使っているのですが、 JavaScriptを外部ファイルにして読み込ませると、ロールオーバー部分の画像のみ切り替わりません。 ////////////////////////////////////////////////// ■外部ファイルの記述内容■ <SCRIPT language="JavaScript"> <!--HPB_SCRIPT_ROV_50 function HpbImgPreload() { var appVer=parseInt(navigator.appVersion); var isNC=false,isN6=false,isIE=false; if (document.all && appVer >= 4) isIE=true; else if (document.getElementById && appVer > 4) isN6=true; else if (document.layers && appVer >= 4) isNC=true; if (isNC||isN6||isIE) { if (document.images) { var imgName = HpbImgPreload.arguments[0]; var cnt; swImg[imgName] = new Array; for (cnt = 1; cnt < HpbImgPreload.arguments.length; cnt++) { swImg[imgName][HpbImgPreload.arguments[cnt]] = new Image(); swImg[imgName][HpbImgPreload.arguments[cnt]].src = HpbImgPreload.arguments[cnt]; } } } } function HpbImgFind(doc, imgName) { for (var i=0; i < doc.layers.length; i++) { var img = doc.layers[i].document.images[imgName]; if (!img) img = HpbImgFind(doc.layers[i], imgName); if (img) return img; } return null; } function HpbImgSwap(imgName, imgSrc) { var appVer=parseInt(navigator.appVersion); var isNC=false,isN6=false,isIE=false; if (document.all && appVer >= 4) isIE=true; else if (document.getElementById && appVer > 4) isN6=true; else if (document.layers && appVer >= 4) isNC=true; if (isNC||isN6||isIE) { if (document.images) { var img = document.images[imgName]; if (!img) img = HpbImgFind(document, imgName); if (img) img.src = imgSrc; } } } HpbImgPreload('_HPB_ROLLOVER1', 'images/request.gif', 'images/request2.gif'); //--> </SCRIPT> ////////////////////////////////////////////////////// 外部ファイル読み込み時のhtmlタグ <SCRIPT type="text/javascript" scr="images/ファイル名"></SCRIPT> 恐らく、ホームページビルダーの独自性の問題だと思うのですが、 どうすればロールオーバーを機能させることができるでしょうか? 宜しくお願いいたします。

  • javascriptの比較演算

    不可解な動作に困っています。 どなたかご教示ください。 <html> <body> <script type="text/javascript"> var a=8; if(10>a>0){document.writeln(a);} else {document.writeln("else");} </script> </body></html> だと、ブラウザで実行すると画面に8と表示されます。 一方 <html> <body> <script type="text/javascript"> var a=8; if(10>a>7){document.writeln(a);}else{document.writeln("else");} </script> </body></html> とすると、実行したときにelseと表示されます。 とても不可解です どうしてでしょうか。

  • チェックボックスの連動でJavaScriptの記述を短くしたい。

    【あ】、【い】という項目があり、それぞれの項目内にA、Bというチェック項目があります。 【あ】項目のAにチェックを入れると【い】のAにもチェックが入るように作りました。 以下のソースでもなんとか動くのですが、【あ】、【い】という項目が増える事とA、Bというチェック項目が増えることが判り、JavaScriptのソースを少しでも短くしたいのですが、なにか好い方法がございましたらお教え頂ければ幸です。 /************参考ソースです*****************/ <html> <head> <title>無題ドキュメント</title> <script> function check_a(){ if(document.form.a.checked==true) { document.form.a.checked=true; document.form.b.checked=false; document.form.aa.checked=true; document.form.bb.checked=false; } } function check_b(){ if(document.form.b.checked==true) { document.form.a.checked=false; document.form.b.checked=true; document.form.aa.checked=false; document.form.bb.checked=true; } } function check_aa(){ if(document.form.aa.checked==true) { document.form.a.checked=true; document.form.b.checked=false; document.form.aa.checked=true; document.form.bb.checked=false; } } function check_bb(){ if(document.form.bb.checked==true) { document.form.a.checked=false; document.form.b.checked=true; document.form.aa.checked=false; document.form.bb.checked=true; } } </script> </head> <body> <form name="form"> 項目【あ】 <input type="checkbox" name="a" onclick="check_a()"> A<BR> <input type="checkbox" name="b" onclick="check_b()"> B<BR> <br /> 項目【い】 <input type="checkbox" name="aa" onclick="check_aa()"> A<BR> <input type="checkbox" name="bb" onclick="check_bb()"> B<BR> <br /> </form> </body> </html> /*************************/ 何卒、宜しくお願い申上げます。m(_ _)m