チェックボックスを付けて、チェックを入れると全て新窓で開く(二枚窓目以降も全て新窓で開く)、チェックを入れない場合は全て同じ窓に上書き表示させるようにしたいです。(デフォルトはチェックが入っている状態にしたい)
※私は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.4
- 回答日時:
URLをコピペした時、空白のUniCodeが入ってしまったようです(汗)
コード内のを検索して消してください。
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で質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでhiddenに二次元配...
-
value内に変数を入れたい
-
selectboxのoptionタグのvalue...
-
Pythonで会員サイトの自動ログ...
-
テキストボックスに入力された...
-
[C#]連想配列の中に配列を入れたい
-
チェックボックスがundefinedと...
-
ラジオボタンの値取得
-
VB.NET DateTimeの型について
-
親ページのフォーム入力データ...
-
hiddenのvalueの値を変えたい
-
return trueとreturn falseの用...
-
onchangeイベントを強制的に発...
-
Selectボックスの幅を自動で広...
-
ボタン2回押しを無効にしたい
-
【jQuery】input nameの文字列...
-
プルダウン選択を変更すると、...
-
FormのonsubmitでJavaスクリプ...
-
javascriptでセレクトボックス...
-
ラジオボタンによるフォームの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
value内に変数を入れたい
-
hiddenのvalueの値を変えたい
-
javascriptでhiddenに二次元配...
-
複数のsubmitボタンで押された...
-
テキストボックスに入力された...
-
switchを使って四則演算のプロ...
-
VB.NET DateTimeの型について
-
クイズ作成:15個の問題から5個...
-
C言語クイックソートの比較総回...
-
セレクトボックスの初期選択状...
-
ラジオボタンの選択で解答・点...
-
子から親へチェックボックスの...
-
ラジオボタンと連動して文字列...
-
setIntervalの間隔を途中で変更...
-
JAVASCRIPTで、ボタンを押した...
-
sessionStorageを調べています。
-
クリックの度に加算していくには?
-
マクロ オブジェクト変数With...
-
3桁区切りのカンマをつけたい...
-
selectboxのoptionタグのvalue...
おすすめ情報