• ベストアンサー

IE以外のブラウザで対応するには

超初心者です、見よう見まねで以下のような、セレクト1を選ぶとセレクト2は「選択」(2を選べばその逆)になる外部javascriptとhtmlを作ってみました。IEでは動く(option valueにリンクする)のですが他(サファリやファイアーフォックス)では全く動きません。どこか変なところがあるのでしょうか?それともIE以外では諦めなければならないでしょうか?ご教授の程、よろしくお願い致します。 #外部javascript(ファイルネーム select.js) var s; function reSel(c) { if(s&&(s!=c)) s.options[0].selected=true; s=c; } function A_Li() { parent.myNew.location.href=document.Link1.select1.options.value;   Sel=document.Link1.select1.selectedIndex;   Ms=document.Link1.select1.options[Sel].value; reSel(document.Link1.select1); } function B_Li() { parent.myNew.location.href=document.Link1.select2.options.value;   Sel=document.Link1.select2.selectedIndex;   Ms=document.Link1.select2.options[Sel].value; reSel(document.Link1.select2); } #以下 HTMLソース <script src="./select.js" type="text/javascript" ></script> <FORM name="Link1"> <select name="select1" onChange="A_Li()"> <option value= new.html selected>選択</option> <option value= aaa.html>aaa</option> <option value= bbb.html>bbb</option> <option value= ccc.html>ccc</option> </select> <select name="select2" onChange="B_Li()"> <option value= new.html selected>選択</option> <option value= ddd.html>ddd</option> <option value= eee.html>eee</option> <option value= fff.html>fff</option> </select> </FORM >

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

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

たびたびすんません。 せれくとをふやすなら、いかのようにするだけ function Li(e) { document.getElementsByName('myNew')[0].src = e.value; 'select1 select2 select3 select4'.replace(/\b(\w+?)\b/g, function (c) {document.getElementsByName(c)[0].options[0].selected=e.name!=c;}); } こんなかきかたは、すすめません。 foreachみなたいなことを、じっけんしてたから、それのおうようと いうことで。

chikomaru
質問者

お礼

度々詳しい内容のご回答ありがとうございます。 頂いた回答を貼り付けましたら動作致しました。 知識不足なため、内容はよくわかりませんでしたが、 ファイアーフォックスでも動作致しました。 本当にありがとうございました

その他の回答 (7)

回答No.8

みたび、すみません。 そもそも、selectが、なんこあろうが、1つだけしかえらべないのなら それは、1つにまとめるべきだとおもう。 <OPTGROUP>を使うとか・・・。 parentってのがあるから、おやだったね。 「iframe 親の操作 javascript」みたいなので、ぐぐってみてね var list = ['select1', 'select2']; var cnt, n; for(cnt = 0; n = list[cnt++]; ) { document.getElementsByName(n)[0].options[0].selected = (e.name != n); } を1ぎょうでやってみたかっただけ

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

#4です。 >myNewはインラインフレームです。 親ウィンドウの中のインラインフレーム? それとも、自ウィンドウ内のインラインフレーム? #3でも描きましたがその部分の指定方法が、通じないのだと思われます。 一応、自フレーム内のiframeだと仮定すると… (親フレーム内の別フレームが対象だとするならば、parentからの  指定が必要になります。その他も含め、位置関係にご注意。) ◆iframeにfrm1などのidを指定して  document.getElementById('frm1').src = ~~~ などで指定する。 (windowオブジェクトを取得してlocationでも良いのでしょうが、  src指定の方が簡単) ◆iframeの名前に重複がないものとすれば  document.getElementsByTagName あるいは  document.getElementsByName などで要素配列を得てそ のなかから対象を特定する 例:  var n = -1, i = -1;  var e = document.getElementsByTagName('IFRAME');  while (e[++i]) if (e[i].name=='myNew'){ n=i; break; }  if (n>-1) e[n].src = ~~~ みたいな方法でいけると思います。 (ByNameで取るなら、#5様のような指定方法です) ------------------------------------------------ >function A_Li() { parent.myNew.location.href=document. >forms['Link1'].elements['select1'].options.value; >Sel=document.forms['Link1'].elements >['select1'].selectedIndex; >Ms=document.forms['Link1'].elements['select1'].options >[Sel].value; >reSel(document.forms['Link1'].elements['select1']); } #4の記述法にするにしても、何度も同じエレメントを長い書き方で記述するのは面倒ですよね? 長い記述は1度だけにして、 function Li() { var elm = document.forms['Link1'].elements['select1']; (iframeの要素の指定).src = elm.options[elm.selectedIndex].value; reSel(elm); } みたいにすれば、少しはすっきりすると思いますが… ( )内はiframeの要素オブジェクト。 (位置関係がよくわからないので、記載していません。) さらに、対象(セレクト)が違うだけで、同じ処理を複数行いたいのならば… functionは一つにしてしまったほうが、簡潔にできます。 その際には、セレクトの識別子(名前とか)を引数で渡して区別すればよいでしょう。引数をthisにしてしまえば、要素の指定も不要になるでしょうから、#2様の回答のように、長い記述そのものがいらなくなります。

chikomaru
質問者

お礼

度々詳しい内容のご回答ありがとうございます。 頂いた回答を理解しようとしましたが、なかなか理解できなく まともなjavascriptを書けそうもなく、今回はせっかく頂いたご回答を生かすことができませんでした。もっと勉強が必要です。 大変申し訳ありませんでした。 また何かありましたらどうぞよろしくお願い致します。 本当にありがとうございました。

回答No.5

そう、じょうけんをこだしにされても・・・ function Li(e) { document.getElementsByName('myNew')[0].src = e.value; 'select1 select2'.replace(/\b(\w+?)\b/g, function (c) {document.getElementsByName(c)[0].options[0].selected=e.name!=c;}); }

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

原因としては、#2様のご指摘の内容が一番怪しそうな気がしますが… >IEでは動く(option valueにリンクする)~~ とのことなので、ご質問のソースは子ウインドウのもので parent.myNew.location.href で親ウインドウを操作しようとしているのでしょうか? myNewが何を指している(つもりな)のか不明ですが、ひょっとして自ウィンドウの名前だったりして?? (この辺はご質問文で説明しておくか、ソースを掲示すべきですね) まずは、名前指定で行うのであれば(Formのエレメントなので)  document.Link1.select1       ↓  document.forms['Link1'].elements['select1'] みたいな、指定方法にしておく方が安全かと思います。 (#2様が例示されているように名前に頼らない方法もあります) parent.myNew.location.href の部分も同様なのですが、myNewが示すオブジェクトが何なのか不明なので具体例が書けません。 まぁ、上と同じような意味合いで、修正すればよろしいかと…

chikomaru
質問者

補足

詳しいご回答誠にありがとうございます。 私の質問文が不正確で申し訳ありませんでしたが、myNewはインラインフレームです。 このセレクトでmyNewインラインフレーム内のhtmlをリンクさせようと (<iframe src="new.html" name="myNew">)思っています。 ご指摘の部分を修正して以下のように書き換えましたがやはりIE以外は動作しませんでした。 var s; function reSel(c) { if(s&&(s!=c)) s.options[0].selected=true; s=c; } function A_Li() { parent.myNew.location.href=document.forms['Link1'].elements['select1'].options.value;   Sel=document.forms['Link1'].elements['select1'].selectedIndex;   Ms=document.forms['Link1'].elements['select1'].options[Sel].value;   reSel(document.forms['Link1'].elements['select1']); } function B_Li() { parent.myNew.location.href=document.forms['Link1'].elements['select2'].options.value;   Sel=document.forms['Link1'].elements['select2'].selectedIndex;   Ms=document.forms['Link1'].elements['select2'].options[Sel].value; reSel(document.forms['Link1'].elements['select2']); } function C_Li() { parent.myNew.location.href=document.forms['Link1'].elements['select3'].options.value;   Sel=document.forms['Link1'].elements['select3'].selectedIndex;   Ms=document.forms['Link1'].elements['select3'].options[Sel].value; reSel(document.forms['Link1'].elements['select3']); } function D_Li() { parent.myNew.location.href=document.forms['Link1'].elements['select4'].options.value;   Sel=document.forms['Link1'].elements['select4'].selectedIndex;   Ms=document.forms['Link1'].elements['select4'].options[Sel].value; reSel(document.forms['Link1'].elements['select4']); } このほか何か私の気がつかないミスでもあるのでしょうか? もしお気づき点などありましたらまたのご回答をお待ちしま すので、よろしくお願い致します。 ありがとうございました。

回答No.3

さんこうにもなりませんが、ひまなときに^^; <select name="select1" onChange="Li(this)"> <select name="select2" onChange="Li(this)"> function Li(e) { 'select1 select2'.replace(/\b(\w+?)\b/g,function(c){document.getElementsByName(c)[0].options[0].selected=e.name!=c;}); }

chikomaru
質問者

補足

詳しいご回答誠にありがとうございます。 今やってみましたが選択画面は確かに[選択]に戻りますが それぞれのoption value="***.html"にリンクしませんでした。 それと私の説明不足で申し訳なかったのですが、 "select2" は他に2つだけではなく、 select3,select4とあります。 このほか何か私の気がつかないミスでもあるのでしょうか? もしお気づき点などありましたらまたのご回答をお待ちしま すので、よろしくお願い致します。 ありがとうございました。

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

もっと単純に・・・ オブジェクトをnameで判断するといろいろ問題が発生しますので こんな感じでやってみては? #select.js function Li(obj){ var f=obj.form; for(var i=0;i<f.length;i++){ if(f[i].type=="select-one" && f[i]!=obj) f[i].selectedIndex=0; } } #htmlファイル <script src="select.js" type="text/javascript" ></script> <form> <select name="select1" onChange="Li(this)"> <option value="new.html" selected>選択</option> <option value="aaa.html">aaa</option> <option value="bbb.html">bbb</option> <option value="ccc.html">ccc</option> </select> <select name="select2" onChange="Li(this)"> <option value="new.html" selected>選択</option> <option value="ddd.html">ddd</option> <option value="eee.html">eee</option> <option value="fff.html">fff</option> </select> </form>

chikomaru
質問者

補足

詳しいご回答誠にありがとうございます。 今やってみましたが選択画面は確かに[選択]に戻りますが それぞれのoption value="***.html"にリンクしませんでした。 このほか何か私の気がつかないミスでもあるのでしょうか? もしお気づき点などありましたらまたのご回答をお待ちしま すので、よろしくお願い致します。 ありがとうございました。

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

片方を選択するともう一方が初期状態「選択」にしたいだけであれば、関数A_Li()と関数B_Li()にある parent.myNew.location.href=document.Link1.select1.options.value; と parent.myNew.location.href=document.Link1.select2.options.value; は不要だと思うのですが…。

chikomaru
質問者

お礼

早々のご回答誠にありがとうございます。 削除するだけで簡単そうなので手はじめにやってみました。 2つともに削除してやってみましたが、全く動作しませんでした。 削除するだけではなく、何かそのほか足りない部分があるのでしょうか? ありがとうございました。

関連するQ&A

  • 複数のプルダウンメニューの表示について

    複数のプルダウンメニューについてですが、 以前、こちらで教えてもらったことを応用したいのです。 フォーームの中の「グループ1」と「グループ2」という大分類は文字の表示だけでリンクしないようにしたいのです。 この状態だと、「グループ1」という名前もプルダウンの中に入ってしまって、 ファイルがないので、リンクエラーの警告がでます。 どこが間違っていて、 どのように変えたらいいのでしょうか。 よろしくお願い致します。 <script language="javascript"> <!-- var s; function reSel(c) { if(s&&(s!=c)) s.options[0].selected=true; s=c; } function A_Li() {   Sel=document.Link1.OP.selectedIndex;   Ms=document.Link1.OP.options[Sel].value;   parent.main.location.href=Ms; reSel(document.Link1.OP); } function B_Li() {   Sel=document.Link1.OP2.selectedIndex;   Ms=document.Link1.OP2.options[Sel].value;   parent.main.location.href=Ms; reSel(document.Link1.OP2); } // --> </script> ---------------HTML------------ <FORM name="Link1"> <SELECT name="OP" onChange="A_Li()" size="1"> <OPTION Value="-" SELECTED>グールプ1</option> <option value="1.htm">あ</option> <OPTION Value="2.htm">い</option> <OPTION Value="3.htm">う</option> <OPTION Value="4.htm">え</option> <OPTION Value="5.htm">お</option> </SELECT> <SELECT name="OP2" onChange="B_Li()" size="1"> <OPTION Value="-" SELECTED>グールプ2</option> <option value="6.htm">か</option> <OPTION Value="7.htm">き </option> <OPTION Value="8.htm">く </option> </SELECT>

  • 複数プルダウンでメニューを初期表示に戻したい

    No.157334でleaz024さんに「複数プルダウンメニュー」について教えてもらったものですが、ひとつ、追加したいことがあるので教えてください。 教えていただいたスクリプトは <script language="javascript"> <!-- function A_Li() {   Sel=document.Link1.OP.selectedIndex;   Ms=document.Link1.OP.options[Sel].value;   parent.main.location.href=Ms;} function B_Li() {   Sel=document.Link1.OP2.selectedIndex;   Ms=document.Link1.OP2.options[Sel].value;   parent.main.location.href=Ms;} // --> </script> <FORM name="Link1"> <SELECT name="OP" onChange="A_Li()" size="1"> <OPTION Value="main.htm" SELECTED>ページを選んでください <option value="main.htm">ぺージ1</option> <OPTION Value="abc.htm">ページ2 <OPTION Value="def.htm">ページ3 </SELECT> <SELECT name="OP2" onChange="B_Li()" size="1"> <OPTION Value="aaa.htm" SELECTED>ページを選んでください <option value="bbb.htm">ぺージ1</option> <OPTION Value="ccc.htm">ページ2 <OPTION Value="ddd.htm">ページ3 </SELECT> です。 例えば OP2のメニューをクリックしたあと OP3のメニューをクリックしたときにOP2のメニューが初期の 表示メニューに戻したいのですが、どう変えればよいでしょうか。 初心者なので本を見てみたのですがわかりませんでした。 どうぞよろしくお願いいたします。

  • 同一ページに複数のプルダウンメニュー

    同一ページに複数のプルダウンメニューをつけたいのですが、 どうすればよいのでしょうか。 下記のように1つはつけることができたのですが、 2つめから、どこをどう変えて追加すればよいのかわかりません。 <script language="javascript"> <!-- function A_Li(){ Sel=document.Link1.OP.selectedIndex; Ms=document.Link1.OP.options[Sel].value; parent.main.location.href=Ms;} // --> </script> <FORM name="Link1"> <SELECT name="OP" onChange="A_Li()" size="1"> <OPTION Value="main.htm" SELECTED>ページを選んでください <option value="main.htm">ぺージ1</option> <OPTION Value="abc.htm">ページ2 <OPTION Value="def.htm">ページ3 </SELECT> よろしくお願いします。

  • リストボックスを連動させて・・・その2

    直前の質問で下記の回答をいただいたものです。 質問では2つのリストボックスを連動させたサンプルの回答をいただきましたが、ひょっとして、リストボックスの個数が何個でも対応させることはできないでしょうか。つまり、リストボックスのnameなどをscript部分に記さずに・・。 ここまでサンプルをもらっても改造できないので質問。 (^^; ■JavaScript <SCRIPT language=JavaScript> <!-- strBase = "test.cgi?hinmei=denwa "; strS1 = "&s1="; strS2 = "&s2="; function set(){  strS1b = strS1  strS2b = strS2   if (document.form.s1.options[document.form.s1.selectedIndex].value)   strS1b += document.form.s1.options[document.form.s1.selectedIndex].value;  if (document.form.s2.options[document.form.s2.selectedIndex].value)   strS2b += document.form.s2.options[document.form.s2.selectedIndex].value;  strURL = strBase + strS1b + strS2b;  document.form.text.value = strURL; } //--> </SCRIPT> ■フォーム <FORM NAME="form"> <select name="s1" onChange="set()"> <OPTION VALUE="" SELECTED>↓【選択して下さい】</OPTION> <OPTION VALUE="big">big</OPTION> <OPTION VALUE="small">small</OPTION> </SELECT> <select name="s2" onChange="set()"> <OPTION VALUE="" SELECTED>↓【選択して下さい】</OPTION> <OPTION VALUE="red">red</OPTION> <OPTION VALUE="white">white</OPTION> </SELECT> <INPUT TYPE="text" SIZE=50 NAME="text"> </FORM>

  • 複数のプルダウンメニューの選択項目を変更するには?

    複数のプルダウンメニューを使ってページリンクをさせています。 その際ページリンクと同時に、他のメニューの選択項目を初期値す方法を教えてください。 No.157334で同じような質問があったので、それを参考に以下のように記述してみましたが、 function reSel(c) { for(i=0; i<9; i++){ var s="document.unit.DDList"; var x=s+i; if(x != c){ x.selectedIndex=0; //ココがうまくいきません。 } } } function Li_0(obj){ parent.res.location.href=obj.options[obj.selectedIndex].value; reSel("document.unit.DDList0"); } (以降 Li_8まで同様) <form name="unit" method="post"> <select name="DDList0" size="1" onChange="Li_0(this)"> <option value="help.html" selected> </option> <option value="unit_a.html">AAA</option> <option value="unit_b.html">BBB</option> </select> (以降 DDList8まで同様) です。 どうぞよろしくお願いいたします。

  • リンク先にまで色変更されたままにしたいのですが。

    以下のようなソースを入れ背景色を変更できるようにしました。 (フレーム1にこのソースを入れフレーム2を変更できるようにしました。) ですが、色変更してもHP内の別のページに行ってしまうとまた、設定する前の状態に戻ってしまいます。 リンク先まで色変更を保ったままにしたいのですがどうすればいいでしょうか?全然わかりません。知ってる方いましたら教えてくださいお願いします。プログラムをどうすればいいのか教えていただけるとうれしいです。 <HTML> <HEAD> <TITLE></TITLE> <SCRIPT LANGUAGE=javascript> <!-- function select1_onchange() { var s = select1.options(select1.selectedIndex).value; if (s == ""){return;} parent.frame2.document.bgColor = s; } //--> </SCRIPT> </HEAD> <BODY> <SELECT id=select1 style="WIDTH: 100px" name=select1 LANGUAGE=javascript onchange="return select1_onchange()"> <OPTION value="" selected>色変えます</OPTION> <OPTION value=red>赤</OPTION> <OPTION value=black>黒</OPTION> </SELECT></P> </BODY>

  • html onchange

    下記のコードでf002は動きますが、f001が動きません。 scriptで作ったオプションメニューもonChangeが働くようにするには、いかがしたらよろしいでしょうか? <script language="JavaScript"><!-- function f001(){ if (document.test.s1.value==2) alert("2が入力されました"); } function f002(){ if (document.test.s2.value==2) alert("2が入力されました"); } var i,ht=[]; i=0; ht[i] = '<select onChange="f001()" id="s1" >'; for( var i=1; i<=5;) ht[i] = '<option value='+(i)+(i==1?' selected':'')+'>'+(i++)+'</option>'; ht[i] = '</select>'; document.write('s1 =', ht.join('')); // --></script> <form name="test"> s2 = <select onChange="f002()" id=s2> <option value=1 selected>1</option> <option value=2>2</option> <option value=3>3</option> <option value=4>4</option> </select> </form>

  • 入力フォームでdisabledによる入力制限

    プルダウンをdisabledで制御しようと思っています。 yearを選択するまでmonthを無効にしたいのですが、うまくいきませんでした。 下記の簡略化したソースでも動作しませんでした。 テストでwindow.openを入れると動作するので、document...の文かとは思うのですが。 どなたかお気づきでしたら、お教え下さい。 よろしくお願い致します。 <html> <head> <title>inputtest</title> <SCRIPT LANGUAGE="JavaScript"> function menu_ctrl(){ var sel_num = document.sel_inp.year.selectedIndex; if(sel_num == 0){ document.sel_inp.month.disabled = false; // window.open("http://www.google.co.jp/"); } } </SCRIPT> </head> <body onload="menu_ctrl()"> <form name="sel_inp"> <select name="year" onchange="menu_ctrl()"> <option value="00" style="color:#AAAAAA">null</option> <option value="01">2007</option> <option value="02">2008</option> <option value="03">2009</option> </select> <select name="month"> <option value="00" style="color:#AAAAAA">null</option> <option value="01">1</option> <option value="02">2</option> <option value="03">3</option> </select> </form> </body> </html>

  • ドロップダウンメニューによるアイフレームへのリンク

    現在Webサイトを作っています。 ですがドロップダウンメニューからリンクをし、リンク先をアイフレームにするのがうまくいきません。 問題のページのHTML、及びJavaScriptは以下の通りです。 <html> <head> <script type="text/javascript"> <!-- function Mylink(form,sel){ mlink=sel.options[sel.selectedIndex].value; if(mlink!="-"){parent.albumf.location.href=mlink;} } //--> </script> </head> <body> <center> <IFRAME name="albumf" frameborder=0 src="●●.html" scrolling=no allowtransparency=true></IFRAME> <BR> <BR> <FORM method="post"> <select onChange="Mylink(this.form,this)"> <OPTION selected value="-">     * メニュー *</OPTION> <OPTION value="-">------------------------</OPTION> <OPTION value="●●.html">項目1</OPTION> <OPTION value="▲▲.html">項目2</OPTION> <OPTION value="-">------------------------</OPTION> </select> </FORM> </center> </body> </html> JavaScriptに関する様々なページを調べましたが、どうしても自力で解決できませんでした。 どなたか改善方法を教えて下さい。 よろしくお願いします。

  • 背景色変更

    現在かなり困っています・・・。 フレームでウインドウを上下で区切って上の方のウインドウ内に以下のようなプログラムをいれ、背景色を簡単に変更できるようにしたのですが、これを上のウインドウ内ではなく下のウインドウないの背景を変えたいのですがどうすればいいのでしょうか・・? つまり、上のウインドウないのリストボックスをいじることで、下の方のウインドウ内の背景色を変更したいのです。 知っている方がいらしたら教えてください。 具体的なプログラムを教えていただけたらうれしいです。 <HTML> <HEAD> <TITLE></TITLE> <SCRIPT LANGUAGE=javascript> <!-- function select1_onchange() { var s = select1.options(select1.selectedIndex).value; if (s == ""){return;} document.bgColor = s; } //--> </SCRIPT> </HEAD> <BODY> <SELECT id=select1 style="WIDTH: 100px" name=select1 LANGUAGE=javascript onchange="return select1_onchange()"> <OPTION value="" selected>色変えます</OPTION> <OPTION value=red>赤</OPTION> <OPTION value=black>黒</OPTION> </SELECT></P> </BODY>

    • ベストアンサー
    • HTML

専門家に質問してみよう