電子書籍の厳選無料作品が豊富!

チェックボックスを付けて、チェックを入れると全て新窓で開く(二枚窓目以降も全て新窓で開く)、チェックを入れない場合は全て同じ窓に上書き表示させるようにしたいです。(デフォルトはチェックが入っている状態にしたい)
※私はjavascriptの書き方は全くわかりません。後で記述パターンを見て機能を追加したりする予定です。
よろしくお願いします。

<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="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) {
swin=window.open("","category_root","");

formx.target="category_root";
formx.submit(); swin.focus();
}

function sitetop(ur) {
swin=window.open(ur,"category_root","");
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); }}

}

//-->
</script>

A 回答 (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トップページ)が表示されました。
    • good
    • 0
この回答へのお礼

私はIEは6、XPでSPバージョンはわからなかったのですが、アップデートしたりしてみると、うまく作動するようになりました。それまでは、やはり、チェックボックスの状態に関係なく上書き表示されたりしていました。
今、時間をかけてテストしてみましたが、軽快に動いています!
私の求めていた形が完成しました!
他の訪問者が使った場合に上記の不具合が出る不安はありますが、非常に満足しています。
数々のご協力、本当にありがとうございました!

お礼日時:2008/07/31 16:33

どうなっているのでしょうね?


こちらの環境(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的に解決しにくい問題なのでしょうか?

補足日時:2008/07/26 21:21
    • good
    • 0

URLをコピペした時、空白のUniCodeが入ってしまったようです(汗)


コード内の​を検索して消してください。

この回答への補足

指摘された四箇所を消しましたが、48行68文字目が構文エラーになりました。どうなっているのでしょうか?

補足日時:2008/07/25 14:12
    • good
    • 0

すみません、消す部分は


swin=window.open("","category_root","");
swin.focus();
でした…(^^;)

この回答への補足

ありがとうございます。
No2の回答をそのまま記載したところ48行目75文字目が構文エラーと出るのですが、どうすればよいでしょうか?

補足日時:2008/07/24 00:11
    • good
    • 0

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文字目が構文エラーになっていると出るのですが、どうすればよいでしょうか?

補足日時:2008/07/24 00:09
    • good
    • 0

はじめまして。

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関係のコードは消してしまいました(^^;)
ないほうが正しく動くようなので。

この回答への補足

ご回答ありがとうございます。
どこを消して、新しく書いて頂いた関数を記述すればよいのでしょうか?
よろしくお願いします。

補足日時:2008/07/23 18:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!