
チェックボックスを付けて、チェックを入れると全て新窓で開く(二枚窓目以降も全て新窓で開く)、チェックを入れない場合は全て同じ窓に上書き表示させるようにしたいです。(デフォルトはチェックが入っている状態にしたい)
※私は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>
No.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トップページ)が表示されました。
私はIEは6、XPでSPバージョンはわからなかったのですが、アップデートしたりしてみると、うまく作動するようになりました。それまでは、やはり、チェックボックスの状態に関係なく上書き表示されたりしていました。
今、時間をかけてテストしてみましたが、軽快に動いています!
私の求めていた形が完成しました!
他の訪問者が使った場合に上記の不具合が出る不安はありますが、非常に満足しています。
数々のご協力、本当にありがとうございました!
No.5
- 回答日時:
どうなっているのでしょうね?
こちらの環境(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的に解決しにくい問題なのでしょうか?
No.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文字目が構文エラーになっていると出るのですが、どうすればよいでしょうか?
No.1
- 回答日時:
はじめまして。
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関係のコードは消してしまいました(^^;)
ないほうが正しく動くようなので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 フォームのチェックボックスの入力チェック JavaScriptの添削依
- 2 Javascript:チェックボックスの状態に応じてテキストボックスの値を削除する
- 3 JavaScriptにて、2つのチェックボックスのチェックができません
- 4 javascriptでチェックボックスの選択状況をチェックする方法につ
- 5 targetブランクで開くのと同じ様にJavaScriptで別窓を開くには?
- 6 テーブル内のチェックボックスを、全て選択、全て解除 したい
- 7 チェックボックスとテキストフィールドを連動させて、Javascriptでチェックをかけたい
- 8 JavaScript チェックボックスで指定の箇所をチェックする方法
- 9 JavaScriptにおいてチェックボックスにチェックをつけるには
- 10 チェックボックスを他のページのチェックボックスと連動させる方法
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
javascriptを使用し、別窓をサ...
-
5
同じページをブラウザで複数開...
-
6
画像から別窓(サイズ指定)を...
-
7
jquery.csv2table.jsに検索窓
-
8
別窓で画像を表示する場合に余...
-
9
小窓に余白が・・・
-
10
小窓を表示する時に、必ず右上...
-
11
IEの拡大・縮小機能をWebページ...
-
12
ウィンドウの2重起動を防止したい
-
13
VB.NET DataGridView 縦スクロ...
-
14
モーダルダイアログウィンドウ...
-
15
alertで、アイコンの変更、又は...
-
16
子ウィンドウの存在確認
-
17
子→親ウインドウへデータを受け...
-
18
Javaスクリプトで画像を縦にス...
-
19
window.openでリファラを取得す...
-
20
window.openでフルスクリーン表示