- ベストアンサー
JavaScriptでチェックボックスの機能を追加する方法
- JavaScriptを使用して、チェックボックスに機能を追加する方法を教えてください。チェックを入れると全て新しいウィンドウで開き、チェックを入れない場合は同じウィンドウで表示されるようにしたいです。私はJavaScriptの知識がないので、具体的な記述パターンも教えていただけると助かります。
- JavaScriptを使用して、チェックボックスに機能を追加してください。チェックを入れると全て新しいウィンドウで開き、チェックを入れない場合は同じウィンドウで表示されるようにしたいです。具体的なコードの記述パターンも教えていただけると助かります。
- チェックボックスにJavaScriptの機能を追加してください。チェックを入れると新しいウィンドウで開き、チェックを入れない場合は同じウィンドウで表示されるようにしたいです。JavaScriptの具体的な記述方法も教えていただけると嬉しいです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
No.2のソース(からUniCodeを消したもの)を実行されたのですよね? 私の環境で試した場合、どれだけ複数ウィンドウが開いていても別窓が開きます。 formx.target = getTarget(); の後に formx.target="category_root"; が残っていたりしませんか? formx.target = "_blank"; は「新規のウィンドウで開く」という意味ですが、 formx.target="category_root"; では、「category_rootという名前の窓を開く」という意味になり、すでにcategory_rootウィンドウが開かれている場合は上書きされてしまいます。 ソースに問題ないのなら、環境の問題かもしれません。どのブラウザ、バージョンで確認されていますか? 念のため、私が試したパターンを書き出しておきますね。 OS:WinXP SP2 ブラウザ:IE6 SP2 1.IEを起動する。 2.適当にGoogleで検索する。(いくつかウィンドウを開く) 3.新しく開いたウィンドウで問題の検索ページを開く。 4.別窓チェックを入れた状態で検索ワード無し×2を実行する。 5.さらに検索ワードを入れて2回実行する。 4、5あわせて4回のスクリプト実行ですが、全て別の窓で検索結果(あるいはGoogleトップページ)が表示されました。
その他の回答 (5)
- mam-mon
- ベストアンサー率100% (2/2)
どうなっているのでしょうね? こちらの環境(IE6とFireFox2)ではまったく問題なく動作します。 どこか単純な間違いがあるのではないでしょうか? 48行目というと if(eng=="google") { if(q=="") sitetop("http://www.google.co.jp/"); else { fw=document.f_google; fw.q.value=q; setsjis(fw); }} ですよね。間違いなく記述されていますか? もし間違いないようなら、エラーが出るソースをもう一度アップしてください。
補足
すみません。はちゃんと消したのですが、その後に空白が一つ入っていたのが原因でした^_^; 消すと正常に作動するようになったのですが… 今、複数ウィンドウを開いている状態で、 作成して頂いたスクリプトを実行(新窓チェックを入れて)開いたのですが、 複数開いているウィンドウの一枚に上書き表示されてしまいました。 この問題は、なんとしてでも解決したい問題です。 完全に新窓で開ける様にする事はできないのでしょうか? 今まで同様のスクリプトをいじってきましたが、このエラーは度々起こります。有名なメタサーチサイトでもこのようなエラーはよく起こります。 javascript的に解決しにくい問題なのでしょうか?
- mam-mon
- ベストアンサー率100% (2/2)
URLをコピペした時、空白のUniCodeが入ってしまったようです(汗) コード内のを検索して消してください。
補足
指摘された四箇所を消しましたが、48行68文字目が構文エラーになりました。どうなっているのでしょうか?
- mam-mon
- ベストアンサー率100% (2/2)
すみません、消す部分は swin=window.open("","category_root",""); swin.focus(); でした…(^^;)
補足
ありがとうございます。 No2の回答をそのまま記載したところ48行目75文字目が構文エラーと出るのですが、どうすればよいでしょうか?
- mam-mon
- ベストアンサー率100% (2/2)
No.1です。 消した部分を具体的に示しますと、display関数内の formx.target="category_root"; formx.submit(); swin.focus(); の2文は消して良いと思います。 display関数、sitetop関数の修正は、前回書いたとおりです。 新しいgetTarget関数はどこに記述しても大丈夫です。一番最後にでも追加してください。 提示されたコードを修正した全文は↓のような感じです。 ------------------------------------------------ <form name="fm" action="void" onSubmit="return false;"> <table style="background-color: #e0e0e0"><tr><td> <input Type="text" name="k" size="60" maxlength="255" value="" onKeyPress="if(event.keyCode == 13) { search('google'); }"> <input Type="reset" value="Reset"> </td></tr><tr><td> <INPUT type="checkbox" id="chk_blank" checked> <input Type="submit" value="Google" onClick="search('google');"> </td></tr></table> </form> <!-- ****Google --> <form name="f_google" method="GET" action="http://www.google.com/search" Accept-charset="Shift_JIS"> <input type="hidden" name="q" value=""><input type="hidden" name="ie" value="Shift_JIS"> <input type="hidden" name="oe" value="Shift_JIS"><input type="hidden" name="hl" value="ja"> <input type="hidden" name="lr" value="lang_ja"><input type="hidden" name="num" value="20"> </form> <script LANGUAGE="JavaScript" Type="text/javascript"> <!-- function seteuc(fx){ bkup=document.charset; document.charset="euc-jp"; display(fx); document.charset=bkup; } function setsjis(fx){ bkup=document.charset; document.charset="shift_jis"; display(fx); document.charset=bkup; } function display(formx) { formx.target = getTarget(); formx.submit(); } function sitetop(ur) { swin=window.open(ur,getTarget(),""); swin.focus(); } function search(eng) { q=document.fm.k.value; if(eng=="google") { if(q=="") sitetop("http://www.google.co.jp/"); else { fw=document.f_google; fw.q.value=q; setsjis(fw); }} } function getTarget(){ blankFlg = document.fm.chk_blank.checked; target = ""; if( blankFlg == true ){ // 別窓で開く target = "_blank"; } else{ // 同じ窓で開く target = "_top"; } return target; } //--> </script> ------------------------------------------------
補足
ありがとうございます。 しかし、上記をそのまま記載したところ48行目75文字目が構文エラーになっていると出るのですが、どうすればよいでしょうか?
- mam-mon
- ベストアンサー率100% (2/2)
はじめまして。Google検索窓は設置したことがないので、参考程度に回答させていただきます。 例として、下記のようなチェックボックスだとします。 <INPUT type="checkbox" id="chk_blank" checked> JavaScriptのコードを見ると、display、sitetopという関数があります。 検索ワードが入力された場合と、何も入力されていない場合で処理を分けているようですね。 とはいえ、 ・チェックボックスのチェック状態を確認する。 ・飛び先を別窓か同じ窓に設定する。 という処理はどちらにも必要なので、新しく関数を作るのが良いかと。 ちなみに私はこんな感じで作りました。 --------------------------------------------------- function getTarget(){ blankFlg = document.fm.chk_blank.checked; target = ""; if( blankFlg == true ){ // 別窓で開く target = "_blank"; } else{ // 同じ窓で開く target = "_top"; } return target; } --------------------------------------------------- この関数をそれぞれの関数内で呼び出します。 --------------------------------------------------- function display(formx) { formx.target = getTarget(); formx.submit(); } --------------------------------------------------- --------------------------------------------------- function sitetop(ur) { swin=window.open(ur,getTarget(),""); swin.focus(); } --------------------------------------------------- ちなみにdisplay関数内のswin関係のコードは消してしまいました(^^;) ないほうが正しく動くようなので。
補足
ご回答ありがとうございます。 どこを消して、新しく書いて頂いた関数を記述すればよいのでしょうか? よろしくお願いします。
お礼
私はIEは6、XPでSPバージョンはわからなかったのですが、アップデートしたりしてみると、うまく作動するようになりました。それまでは、やはり、チェックボックスの状態に関係なく上書き表示されたりしていました。 今、時間をかけてテストしてみましたが、軽快に動いています! 私の求めていた形が完成しました! 他の訪問者が使った場合に上記の不具合が出る不安はありますが、非常に満足しています。 数々のご協力、本当にありがとうございました!