• ベストアンサー

リンクの無効化/有効化 の切り替え

いつもお世話になっております。 login.jsp A.jsp B.jsp C.jsp という画面があり、ログイン画面以外の画面上部に以下のようにリンクを張り付けております。 <a id="AH" href="A.jsp" onClick="Aheader()">A画面へ</a> <a id="BH" href="B.jsp" onClick="Bheader()">B画面へ</a> <a id="CH" href="C.jsp" onClick="Cheader()">C画面へ</a> ログイン画面でログインに成功すると、A.jspへ遷移します。 (1)A画面へ遷移した後、『A画面へ』のリンクを無効化 『B画面へ』をクリックすると、 (2)B.jspへ遷移し、『A画面へ』のリンクを有効化・『B画面へ』のリンクを無効化 (C画面も(2)と同じ仕組み) ---------Script--------- window.onload = function() { var element = document.getElementById("AH"); element.removeAttribute("href"); } function Aheader() { var element = document.getElementById("AH"); element.removeAttribute("href"); } function Bheader() { var element = document.getElementById("BH"); element.removeAttribute("href"); } function Cheader() { var element = document.getElementById("CH"); element.removeAttribute("href"); } ------------------------------------ これを実行すると、確かに無効化はされますが、有効化が出来ていない状態です。(hrefが削除されたままなので・・・) ですので、setAttribute を使えば出来そうだと考えたのですが、うまく動きませんでした。 ぜひ皆様の知恵をお借りしたく質問させていただきました。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.4

ヘッダーを別ファイルで実装するなら、 sessionにどの画面を読み込んでいるかを保存し、 場合分けしてはどうですか? A画面のソース A画面へ <a id="BH" href="B.jsp" onClick="Bheader()">B画面へ</a> <a id="CH" href="C.jsp" onClick="Cheader()">C画面へ</a> B画面のソース <a id="AH" href="A.jsp" onClick="Aheader()">A画面へ</a> B画面へ <a id="CH" href="C.jsp" onClick="Cheader()">C画面へ</a> のような感じです。 実際にはjavascriptでsessionは使えないから、onclick部分は それ用に修正がいりますけど。 includeでsessionが使えたかどうか、うろ覚えですが、 無理な場合は、server.excute何かも使えたのではないかと・・ #2さんが言われてるように javascriptよりかは簡単だと思いますが・・

a6mi15
質問者

お礼

chochobizo様 >リンクを省いた状態でHTML出力するか は、そういう意味だったのですね。 確かにその方法が簡単に済みますよね;; 一応includeするようにと言われておりますので、sessionを使うという案でやってみます(*^^*) 大変お手数をお掛けいたしまして、申し訳ございませんでした。 そして、ありがとうございました。

その他の回答 (3)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。 どうせA.jsp、B.jsp、C.jspの3つに分かれていて、高々そのくらいの処理ならばわざわざinculudeしなくても、前半の方法で直接2行ずつ記入したほうが簡単そうな気がしますが? どうしてもincludeで処理したければ、後半の方法で可能では? (jsp自体をよく知らないけど) しつこいようですが、せっかくjspにしているのだから、その部分に関してはjavascriptは不要でしょう。(前半の方法だとjspの必要もないけれど…)

a6mi15
質問者

お礼

fujillin様 chochobizo様にもお伝えしたのですが、 一応includeするようにと言われておりますので、今回は直接2行ずつではなくsessionで判断することに致しました。 ありがとうございました(*^^*)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

よく理解できてないけれど…  A.jsp → BとCのリンクを表示  B.jsp → AとCのリンクを表示  C.jsp → AとBのリンクを表示  するのだと解釈しました。 結果が固定で、ファイルが分かれているのなら、#1様が既に回答されているように、javascriptの必要もありません。 それぞれの出力するHTMLソースを修正するだけでよろしいかと。 ABC.jspみたいな一つのファイルで3個分を兼ねるのであれば、必要なリンクだけ出力することが必要になるかも知れませんが、その場合も、javascriptでやるより、サーバサイドで出力し分けるのがよろしいかと。 (何のためにjspにしているのかわからない)

a6mi15
質問者

補足

fujillin様 ご回答ありがとうございます。 私の説明不足で申し訳ございません。 <a id="AH" href="A.jsp" onClick="Aheader()">A画面へ</a> <a id="BH" href="B.jsp" onClick="Bheader()">B画面へ</a> <a id="CH" href="C.jsp" onClick="Cheader()">C画面へ</a> これは各画面の共通ヘッダーとして利用するため、 この3つのリンクだけを記述したjsp(仮にheader.jspとする)を作成しており、header.jspをA,B,Cの各jsp上部でincludeしております。 ですので、この3つのリンクはA,B,Cの全部の画面の上部に表示されています。 『A画面へ』をクリックしA画面を開いたら、 現在A画面にいることを示すために、A.jspのリンクを無効化したいという狙いでございます。 他の画面も同様です。 この様な説明で伝わりますでしょうか? 説明が下手で申し訳ございません。 ご理解いただけたようでしたら、是非ご指導お願いいたします。

回答No.1

サーバサイドで、リンクを省いた状態でHTML出力するか A.jsp,B.jsp,C.jspとそれぞれにファイルが分かれているので、 それぞれのHTMLソースの該当個所のリンクを省く。

a6mi15
質問者

補足

chochobizo様 ご回答ありがとうございます。 >リンクを省いた状態でHTML出力するか removeAttribute("href")のことでしょうか? >それぞれのHTMLソースの該当個所のリンクを省く。 これは、 A画面にいる時には、『A画面へ』を表示すらしないようにするということでしょうか? お手数ですが、よろしくお願いいたします。

関連するQ&A

  • メモリリークに関して

    お世話になります。クロージャ使用によるメモリリークについて、 function doHoge(element) {  element.onClick = function() {   // do domething  } } でメモリリークが起こりますが、次の場合はどうなるでしょうか。 function doHoge() {  var element = document.getElementById("aa");  element.onClick = function() {   // do domething  } } あるサイトではdoHogeの引数のみに言及していましたが、この場合もクロージャはelementを参照するのでメモリリークが起こると思うのですが、 どうでしょうか。 よろしくお願いします。

  • リンク押下でタグを書き換えたい

    リンクが複数あって、押したリンク文字だけ<span></span>のみにしたいと 思っています。また対応するdivタグのdisplay属性も書き換えたいです。 とりあえず思いついたのは以下の方法なのですが、冗長ですし、 リンクの数が増えた場合に足していくのが大変です。 もっとシンプルに書く方法がないものでしょうか。 ご助言ください。 <html> <body> <script> function change(spanid,divid,menuName){ document.getElementById('menu1').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu1','div1','メニュー1')\">メニュー1</a>"; document.getElementById('div1').style.display="none"; document.getElementById('menu2').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu2','div2','メニュー2')\">メニュー2</a>"; document.getElementById('div2').style.display="none"; document.getElementById('menu3').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu3','div3','メニュー3')\">メニュー3</a>"; document.getElementById('div3').style.display="none"; document.getElementById(spanid).innerHTML = menuName; document.getElementById(divid).style.display="block"; } </script> <ul> <li><span id="menu1">メニュー1</span></li> <li><span id="menu2"><a href="javascript:void(0)" onclick="change('menu2','div2','メニュー2')">メニュー2</a></li> <li><span id="menu3"><a href="javascript:void(0)" onclick="change('menu3','div3','メニュー3')">メニュー3</a></li> </ul> <div id="div1"> test1 </div> <div id="div2" style="display:none"> test2 </div> <div id="div3" style="display:none"> test3 </div> </body> </html>

  • 全てのリンクがtwitterを指すようになる

    おねがいします。 今JavaScriptを使ってiframeの中にそれぞれのリンクを読み込もうとしているのですが、 その全てのリンクが、特定のリンク(twitter.com)を指すようになってしまいます。 ソースは以下です ------------------------------------------- var loaded_document = false; var linksId = { 'scripts': { 'showed': 0 }, 'cgi': { 'showed': 0 }, 'blog': { 'showed': 0 }, 'twitter': { 'showed': 0 } }; function runOnLoad() { if (loaded_document) return; for (var id in linksId) { linksId[id].url = document.getElementById(id).firstChild.href; document.getElementById(id).firstChild.href = 'javascript:void(0);'; addHandler( function () { alert('clicked ' + id); loadOnClick(id); }, document.getElementById(id), 'click' ); } loaded_document = true; } ------------------------------------------- このrunOnLoadがonloadの時に呼ばれるのですが、 どのリンクをクリックしても"clicked twitter"と表示されてしまいます。 クロージャ・・・?と思ったのですがJavaScriptに詳しくないのでよくわかりません。 誰か御教授くださいm(_ _)m

  • 効率良くイベントに引数を渡すやり方

    sample2に引数「x」「y」を渡したいが為に 次のように何段階も同じような作業をしなくてはならない方法しか 自分は思いつかないのですが、何かもっと効率的な方法はあるのでしょうか? function main() { var element = document.createElement('div'); element.x = x; element.y = y; element.onclick = function(){ sample1(this.x, this.y); }; } function sample1(x, y) { var element = document.createElement('span'); element.x = x; element.y = y; element.onclick = function(){ sample2(this.x, this.y); }; } function sample2(x, y) { alert("x="x+" y="+y); }

  • JavaScriptで呼び出したテキストリンクを画像にするには

    Java Scriptで呼び出したテキストリンクを、画像に替えたいのですがうまくいきません。人がつくったScriptの改造なので、今ひとつわかりにくくて困っています。 ソースは function callJavascript(str) { var obj = parent.document.getElementById('maryleTVLink'); obj.innerHTML = "<a href='http://localhost:8888/cb/cframe_play.php?user=tbsv1&idx=" +str+ "' onclick=\"return GB_myShow('MaryleTV', this.href)\">大きく見る</a>" ; } です。 作りとしては、callJavascriptを読み込んでいる画像(Flash)をクリックすると、テキストリンクが表示される、というものです。 「大きく見る」の部分を画像のボタンにしたいのですが、 どうしたら良いか教えてください。

  • リンクレイヤー表示の切り替えについて

     もともとは1つのリンクメニューの表示と非表示を切り替える書籍のサンプルを2つのリンクメニューを同じ場所に切り替え表示させるよう修正を行ってみました。  ですが、リンク(1)を表示させてからリンク(2)をさせるにはリンク(1)を再度クリックし、一度非表示にしないとリンク(2)が表示されません。  リンク(1)の表示から直接リンク(2)の表示に切り替えるようにしたいのですがどなたかご教授願えませんでしょうか。 <html> <head> <SCRIPT Language="JavaScript"> <!-- types = "hidden"; function pullDownMenu(tagName,x,y) { if (types == 'hidden') types = 'visible'; else types = 'hidden'; if (document.layers) document.layers[tagName].visibility = types; if (document.all) document.all(tagName).style.visibility = types; } // --> </SCRIPT> </head> <body> <DIV STYLE="position: absolute; left: 168; top: 15; visibility: hidden; width: 182; height: 56" ID="tag1"> <TT> <A HREF="http://a.co.jp">サイトA</A><BR> <A HREF="http://b.co.jp">サイトB</A> </TT> </DIV> <DIV STYLE="position: absolute; left: 168; top: 15; visibility: hidden; width: 182; height: 56" ID="tag2"> <TT> <A HREF="http://c.co.jp">サイトC</A><BR> <A HREF="http://d.co.jp">サイトD</A> </TT> </DIV> <table> <tr> <td> <A HREF="sample.htm" onClick="pullDownMenu('tag1');return false">リンク(1)</A> <A HREF="sample.htm" onClick="pullDownMenu('tag2');return false">リンク(2)</A> </td> </tr> </table> </body> </html>

  • リンク先のアドレス内に「?」が入っている場合の対処法

    先日、元々のリンク先から1行テキスト領域にID等を入力し各々異なる場所に飛ばす方法を教えていただきました。 そして解決したのですが、そのアドレスに「?」が入っている場合、反応しないようです・・・。 解決方法はあるのでしょうか?どなたかご教授お願いします。下記が現在組んでいるものです。 ●通常のアドレスの場合(「?」無し) ※これは成功します <script> function change(){ var change=document.getElementById("change"); var tags=document.getElementsByTagName("a"); for(var i=0;i<tags.length;i++){ var url="http://aaa.bbb.ccc/" if(tags[i].href.match(url)){ tags[i].href=url+change.value; }; } } </script> <a href="http://aaa.bbb.ccc/" target="_blank"> <img src="http://aaa.bbb.ccc/image/d.gif"></a> <input type="text" id="change"> <input type="button" value="変換" onClick="change()"> ●「?」がアドレス内にある場合 ※これは反応しません <script> function change(){ var change=document.getElementById("change"); var tags=document.getElementsByTagName("a"); for(var i=0;i<tags.length;i++){ var url="http://aaa.bbb?.ccc/" if(tags[i].href.match(url)){ tags[i].href=url+change.value; }; } } </script> <a href="http://aaa.bbb?.ccc/" target="_blank"> <img src="http://aaa.bbb.ccc/image/d.gif"></a> <input type="text" id="change"> <input type="button" value="変換" onClick="change()"> 宜しくお願いします。

  • リンクを新しい窓で開きたい

    ページ内の外部リンクのみ、新窓で開きたいなと考え、『javascript 新窓』で検索した際に見つけた方法にID指定というものがありました。試してみたところ、一つ目のIDしか反映されませんでした。記述方法を変えれば、複数IDを指定することが可能なのでしょうか? ご指南お願い致します。 #HTML例 ###################### <p id="sample"> <a href="sample.html">サンプル1</a> </p> <p id="sample2"> <a href="sample2.html">サンプル2</a> </p> #script記述例 ###################### window.onload = getSrc; function getSrc() { var x = document.getElementById('sample','sample2').getElementsByTagName('a'); for (var i=0; i<x.length; i++) { x[i].onclick = function () { return openWin(this.href); } x[i].onkeypress = function () { return openWin(this.href); } } } function openWin(target) { open(target); return false; }

  • JavaScriptでエレメントのIDを取得

    JavaScriptで、エレメントのIDを取得する方法がわからず困っています。 [画像]ここをクリック [画像]ここをクリック 上記が画面配置のイメージなのですが、「ここをクリック」の文字をクリックした時に、そのクリックされた<a>タグのIDを取得したいのです。 以下が試行錯誤したソースの一部です。 [html] <img src="./test_01.gif" name="testImg01"> <a href="javascript" id="test_01" onclick="getID(this);">ここをクリック</> <img src="./test_02.gif" name="testImg02"> <a href="javascript" id="test_02" onclick="getID(this);">ここをクリック</a> [JavaScript] function getID(element) { var id = document.getElementById(id); alert(id); } 上記コードで得られたのは「null」という値でした。 色々検索してはいるのですが、思うように値を取得できません。 どうか知恵をお貸しください。

  • javascript初心者です。

    javascript初心者です。 特定要素の相対座標位置を取得したく、getBoundingClientRect()を使用しているのですが、firefox2.0でも、見れるようにしなくてはいけなくて、その場合、getBoundingClientRect()がfirefox2.0では使えません。 それに変わる関数などを探していましたが、わからなかったので、下記のソースを var element = document.getElementById("sample"); var elementY = element.getBoundingClientRect() 以下のように変えてみました。 var element = document.getElementById("sample"); var elementY = element.offsetTop - window.screenY; ですが、予期した値が取得できません。 ページ内で、スクロールすると、elementYが変わるようになっています。 どう書き換えたらよいか、どなたかご教授お願いいたします。

専門家に質問してみよう