Javascript に関する質問です。HTML にプルダウンメニューを設置し各ページに飛ばす際に、

特定のページに飛ばす場合にのみ別ウィンドウを開かせるようにするにはどうすればよいのでしょうか?

下記は Dreamweaver MX がはき出した Javascript です。
<option value= の中の、外部リンクとなっている「Hoge+」の場合だけ、別ウィンドウにしたいのです。
当方 Javascript に関してはほとんど素人です。どこに何を、どう書き換えてやればいいのか、どうか教えてください。

【Javascript】
<script language="JavaScript" type="text/JavaScript">
function MM_jumpMenu(targ,selObj,restore){ //v3.0
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
</script>

【HTML側】
<select onchange="MM_jumpMenu('parent',this,0)" name=menu1>
<option selected>-- Select --</option>
<option value="hoge1.html">Hoge1</option>
<option value="hoge2.html">Hoge2</option>
<option value="hoge3.html">Hoge3</option>
<option value="http://www.hoge.jp/hoge.html">Hoge+</option>
<option value="hoge4.html">Hoge4</option>
</select>

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/10/18 22:59:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:nattow No.3

回答回数102ベストアンサー獲得回数27

ポイント50pt

以下ではいかがでしょうか?

1番の方の回答とほぼ同様ですが、IE のみでしか使えない(と思う)innerHTML を使わずに記述しています。

<script language="JavaScript" type="text/JavaScript">
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  if(selObj.options[selObj.selectedIndex].text=="Hoge+"){
    window.open(selObj.options[selObj.selectedIndex].value);
  }else{
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  }
  if (restore) selObj.selectedIndex=0;
}
</script>
id:occapie

ありがとうございます!

なんだか拍子抜けするほどうまくいきました。

talepandaさま、llusallさま、nattowさま、皆さまのお陰でようやくお風呂に入れます。

本当に助かりました。

2006/10/18 22:57:30

その他の回答2件)

id:talepanda No.1

回答回数57ベストアンサー獲得回数12

ポイント50pt
<script language="JavaScript" type="text/JavaScript">
function MM_jumpMenu(targ,selObj,restore){ //v3.0
if(selObj.options[selObj.selectedIndex].innerHTML=="Hoge+")
window.open(selObj.options[selObj.selectedIndex].value);
else
eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
if (restore) selObj.selectedIndex=0;
}
</script>
id:occapie

ありがとうございます。

早速試してみましたが、うまくいきません。(同一ウィンドウになってしまいます)

<select onchange="MM_jumpMenu('parent',this,0)" name=menu1>

の部分はこのままでよいのでしょうか?

2006/10/18 22:38:29
id:llusall No.2

回答回数505ベストアンサー獲得回数61

ポイント50pt

Hoge+の判断は、

selObj.options[selObj.selectedIndex].innerText

でおこないます。

新しいウィンドウは、window.openで行います。

  参考 http://www.tohoho-web.com/js/window.htm#open


<script language="JavaScript" type="text/JavaScript">
function MM_jumpMenu(targ,selObj,restore){
    if (selObj.options[selObj.selectedIndex].innerText=="Hoge+"){
        window.open(selObj.options[selObj.selectedIndex].value,"sample", "width=320, height=240,scrollbars=no,location=no, menubar=no,left=10,top=30");
    }else{
        eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
    }
    if (restore) selObj.selectedIndex=0;
}
</script>
id:occapie

ありがとうございます。

とほほは見てみたのですが、自分でいじる部分がサッパリで…。

ちなみに「width」や「scrollbars」などの部分は不要なのですが、実際にどこを書き換えるのでしょう?

2006/10/18 22:43:26
id:nattow No.3

回答回数102ベストアンサー獲得回数27ここでベストアンサー

ポイント50pt

以下ではいかがでしょうか?

1番の方の回答とほぼ同様ですが、IE のみでしか使えない(と思う)innerHTML を使わずに記述しています。

<script language="JavaScript" type="text/JavaScript">
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  if(selObj.options[selObj.selectedIndex].text=="Hoge+"){
    window.open(selObj.options[selObj.selectedIndex].value);
  }else{
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  }
  if (restore) selObj.selectedIndex=0;
}
</script>
id:occapie

ありがとうございます!

なんだか拍子抜けするほどうまくいきました。

talepandaさま、llusallさま、nattowさま、皆さまのお陰でようやくお風呂に入れます。

本当に助かりました。

2006/10/18 22:57:30
  • id:talepanda
    手元の環境ではうまくいくんですが、OS、ブラウザはなんですか?

    あと、scriptを以下のように書き換えると、メニューを選択したときにメッセージボックスが出てくると思いますが、何て出てきますか?

    >||
    <script language="JavaScript" type="text/JavaScript">
    function MM_jumpMenu(targ,selObj,restore){ //v3.0
    alert(selObj.options[selObj.selectedIndex].innerHTML);
    alert(selObj.options[selObj.selectedIndex].innerHTML=="Hoge+");
    if(selObj.options[selObj.selectedIndex].innerHTML=="Hoge+")
    window.open(selObj.options[selObj.selectedIndex].value);
    else
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
    if (restore) selObj.selectedIndex=0;
    }
    </script>
    ||<

  • id:llusall
    FireFox での動作に対応させました。


    <script language="JavaScript" type="text/JavaScript">
    function MM_jumpMenu(targ,selObj,restore){ //v3.0
    var optText;
    if (navigator.userAgent.indexOf("Firefox") > -1) {
    optText = selObj.options[selObj.selectedIndex].textContent;
    }else{
    optText = selObj.options[selObj.selectedIndex].innerText;
    }
    if (optText=="Hoge+"){
    window.open(selObj.options[selObj.selectedIndex].value,"sample", "width=320, height=240,scrollbars=no,location=no, menubar=no,left=10,top=30");
    }else{
    eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
    }
    if (restore) selObj.selectedIndex=0;
    }
    </script>


    sample は、ウィンドウのタイトルです。
    width は、ウィンドウの幅です。
    height は、ウィンドウの高さです。
    left は、ウィンドウの左位置です。
    top は、ウィンドウの右位置です。


    scrollbars=no は、スクロールバーを表示しません。(yesで表示)
    location=no は、ロケーションバーを表示しません。(yesで表示)
    menubar=no は、メニューバーを表示しません。(yesで表示)


    ※必要なかったり、わからない部分は、削ってみてはいかがでしょうか?
    ※いろいろいじってみると、わかってくると思います。
  • id:occapie
    OSはWinXP Pro、ブラウザはIE6です。(このコメントはMacで書いていますが)
    talepanda さんがお答えくださったものを試す際に、実は大変申し訳ないのですが option 側に余計なタグがくっついているのを見落としていまして…お答えくださった script でいけるのを先ほど確認しました。
    また、ちゃんと(?)「hoge+」「true」と表示されました。
    うっかりミスでご心配をお掛けしました。
  • id:occapie
    scrollbars や width 程度は辛うじて知っていたのですが、大変勉強になりました。仰る通り色々いじってみないといけませんね。

    left、top などはまさにちょっと悩んでいた部分ですし、早速試してみます。

    talepandaさん、llusall さん、本当にありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません