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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新しくフォルダを作成したい
-
フォーム内の同一名のエレメン...
-
【jQuery】input nameの文字列...
-
複数のテキストフィールドを同...
-
ボタンを押すとテキストボック...
-
ラジオボタンでクリックした値...
-
submit()で送れない
-
name属性の背景に色をつける
-
セレクトボックスでの結果で画...
-
ファイル選択ダイアログが表示...
-
二つの入力欄に、同時に同じ文...
-
動的にTabindexの値を変えたい!
-
テキストボックスの値同士を比...
-
jQueryの$.getJSONでデータを渡...
-
javascript name="hoge"等に記...
-
任意のフォームのみ右クリック禁止
-
cookie使用時にundefinedと表示...
-
javascriptからxsltに値を渡したい
-
return trueとreturn falseの用...
-
プルダウン選択を変更すると、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jQuery】input nameの文字列...
-
二つの入力欄に、同時に同じ文...
-
新しくフォルダを作成したい
-
name属性のないformタグの、中...
-
入力フォームに半角スペース以...
-
ラジオボタンでクリックした値...
-
ASP.NETでNAME属性を固定にしたい
-
JavaScriptにて動的に配列を作...
-
cookie使用時にundefinedと表示...
-
submitボタン押下時にPOSTされ...
-
Javascriptでのbuttonのname属...
-
エクセル マクロ submitについて
-
jqueryでtextareaのcols、rows...
-
javascriptの値をformのinput h...
-
動的にTabindexの値を変えたい!
-
テキストボックスの入力をリセット
-
ファイル選択ダイアログが表示...
-
現在フォーカスのオブジェクト...
-
ボタンを押すとテキストボック...
-
テキストエリアをenterキーでフ...
おすすめ情報