javascript初心者です。
2回目以降、リンク先が一つのページ上に上書きされてしまいます。
リンク先を開くたび新しい窓で開きたいのですがどうしたらよいのでしょうか?
target=_blankやwindow.openなどではないかと思いますが設置場所がよくわかりません。。
また、サンプルソースを見てもjavascriptの部分がいまいち理解できずにいます。
だいたいの流れやURLクリエの部分(HTMLの部分)はなんとなく理解できるのですが文字コードなど表示方法などのところがよくわかりません;;
わかりやすくコメントを書いていただけると助かります!
ソースはこちらです↓
------------------------------------------------------------------------------
<body>
<noscript>JavaScriptが無効です</noscript>
<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');">
<input Type="submit" value="Yahoo!" onClick="search('yahoo');">
</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>
<!-- Yahoo! -->
<form name="f_yahoo" method="GET" action="http://search.yahoo.co.jp/search" Accept-charset="Shift_JIS">
<input type="hidden" name="ei" value="SJIS">
<input type="hidden" name="fr" value="sfp">
<input type="hidden" name="p" value="">
</form>
<script LANGUAGE="JavaScript" Type="text/javascript">
<!--
function setutf(fx){
bkup=document.charset;
document.charset="utf-8";
display(fx);
document.charset=bkup;
}
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); }}
if(eng=="yahoo") if(q=="") sitetop("http://www.yahoo.co.jp/"); else { { fw=document.f_yahoo; fw.p.value=q; setsjis(fw); }}
}
//-->
</script>
</body>
No.1ベストアンサー
- 回答日時:
開くたびに新しい窓/タブで開く方法は幾つかあります。
ただし窓なのかタブなのかは環境によって変わるのでご注意ください。
* window.open の第二引数に '_blank' を指定
* 要素 <form> の属性 target に '_blank' を指定して、改行キー or ボタン押下 or submit()
* 要素 <a> の属性 target に '_blank' を指定して、クリック or click()
それにしても、ご提示のサンプルソースがあまり良い教材ではありません。
えらく古いし冗長だし命名も変だし文字コードもUTF8で十分だし...
昔のブラウザを考慮しなければいけない特殊な事情があるなら別ですが、
今ならもっと簡単にすっきり書けます。
<form name=fm>
<input type=text name=k size=60> <button type=reset>Reset</button> <br>
<button type=submit name=ggl>Google</button> <button type=submit name=yho>Yahoo! Japan</button>
</form>
<div style="display:none"><!-- 見せたくないから見せない -->
<form name=subggl method=get target=_blank action="http://www.google.co.jp/search">
<input type=text name=q><a href="http://www.google.co.jp/" target=_blank>top</a></form>
<form name=subyho method=get target=_blank action="http://search.yahoo.co.jp/search">
<input type=text name=p><a href="http://www.yahoo.co.jp/" target=_blank>top</a></form>
</div>
<script>
addEventListener('load', function(){ var _=0; // 読みやすくするオマジナイ
_ ; function searchOnNewTab(name, v) {
_ , _ ; var form = document.forms['sub' + name];
_ , _ ; if (v === '') {
_ , _ , _ ; form.getElementsByTagName('A')[0].click()
_ , _ ; } else {
_ , _ , _ ; form.getElementsByTagName('INPUT')[0].value = v;
_ , _ , _ ; form.submit();
_ , _ ; }
_ ; }
_ ; document.forms['fm'].addEventListener('click', function(ev){
_ , _ ; if (ev.target.type != 'submit') return; // 目的のボタン以外は処理しない
_ , _ ; ev.preventDefault();
_ , _ ; var form = ev.currentTarget;
_ , _ ; var name = ev.target.name;
_ , _ ; var valu = form.elements['k'].value;
_ , _ ; searchOnNewTab(name, valu);
_ ; }, false);
}, false)
</script>
ご参考まで
この回答への補足
お礼と補足が逆でしたね^^;
getElementsByTagNameはsafariでバグがあるそうです
ClassNameにするかボタンにすることで解決できました!
窓かタブかはブラウザの設定でどうにかなりました!
回答ありがとうございまいた!!!
回答ありがとうございます!
サンプルが古いので助かりました。こんなにすっきりなるんですね!!
窓かタブかはブラウザで変わりますね・・・
すべてタブで開きたいのですが無理なんですかね?
あとなぜかsafariだけフォーム未入力時の処理が動作しなかったです><
お探しの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
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP php ログイン 1 2022/11/01 00:24
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WWW::Mechanizeについて教えて...
-
Javascriptでのbuttonのname属...
-
firefoxでのフォーカス位置の取得
-
JavaScriptにて動的に配列を作...
-
Javascriptで自動的に計算する...
-
特定<table>内の<td>の色を変える
-
【javascript】 年齢計算
-
sessionの値でボタンを活性・非...
-
テキストボックスに任意のURLを...
-
select要素のvalueを配列で取得...
-
onchangeイベントを強制的に発...
-
csvファイルの内容を絞り込みた...
-
input type="image"の時、enter...
-
正規表現で複数マッチ条件で悩...
-
return trueとreturn falseの用...
-
selectのnameが配列の場合
-
submitがおされた同時に JavaSc...
-
ループで連続したフォームの値...
-
プルダウン選択時、既に入力済...
-
name属性が同じフォームが複数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jQuery】input nameの文字列...
-
javascriptの値をformのinput h...
-
JavaScriptにて動的に配列を作...
-
新しくフォルダを作成したい
-
二つの入力欄に、同時に同じ文...
-
Javascriptでのbuttonのname属...
-
name属性のないformタグの、中...
-
テキストボックスの入力をリセット
-
出発駅A、到着駅Bを選択すると...
-
ASP.NETでNAME属性を固定にしたい
-
submitボタン押下時にPOSTされ...
-
ラジオボタンでクリックした値...
-
テキストボックスの値同士を比...
-
jqueryでtextareaのcols、rows...
-
入力フォームに半角スペース以...
-
cookie使用時にundefinedと表示...
-
ファイル選択ダイアログが表示...
-
テキストエリアをenterキーでフ...
-
hiddenを動的に作成したい
-
ボタンを押すとテキストボック...
おすすめ情報