はじめまして。
ページ内の押下したボタン/リンクに応じて、それぞれ別の新しいウィンドウにフォームの値を渡して処理を行うプログラムを作成しています。
リンク1押下→ウィンドウAを開く→アドレス1に遷移
リンク2押下→ウィンドウBを開く→アドレス2に遷移
ボタン3押下→自画面でアドレス3に遷移
フォームは共通で、JavaScript内でウィンドウ及びアクションの指定を行っています。
しかし、実際に動かしてみると、以下の問題が起こりました。
・ウィンドウを開いた後、いつまでも遷移しない(する時もある)
・ウィンドウを開いた後、意図しないアドレスに遷移することがある
具体的には、新規ウィンドウで、現在開いているアドレスへの遷移
・フォームの値が送信されないことがある(する時もある)
いろいろ調べてみたのですが、原因がわかりません。
お力を貸していただけないでしょうか。
文末に抜粋したソースを掲載します。
ブラウザはIE7、関連あるかは分かりませんが、PHPとsmartyを使っています。
宜しくお願いいたします。
【JavaScript部分】
function action1(){
document.form.action = "http://www.yahoo.co.jp"
document.form.target = "_self";
document.form.submit();
}
function action2(){
window.open("", 'win2', 'width=400, height=300');
document.form.action = "http://www.google.co.jp"
document.form.target = "win2";
document.form.submit();
}
function action3(){
window.open("", 'win3', 'width=400, height=300');
document.form.action = "http://www.msn.co.jp"
document.form.target = "win3";
document.form.submit();
}
【HTML部分】
<form name="form" method="post" action="">
<input type="text" name="text1" value="">
<a href="javascript:action2();">リンク1</a>
<a href="javascript:action3();">リンク2</a>
<input type="button" value="ボタン3" onClick="action1()">
</form>
No.4ベストアンサー
- 回答日時:
タイミングの問題かと思われます。
window.open() で実際にwiindowを開くのに掛かる時間よりも早くsubmit() が実行されてしまうと、その後から、blank ファイルを開くので、submit情報が失われる。または、target名の同じwindowを同時に2つ開こうとしてコンフリクトしてしまうとか。
特にcpuが遅かったり、動作の重いブラウザでこの可能性があります。4-5年前には、この手の質問も結構見かけました。
目的としては、windowサイズ指定したくて、window.openを実行してるのかな?
その場合、window.open の戻り値を保持して、subwindowのonload で、submit実行するようにすれば確実のようにも思います。setTimeout で実行開始をずらすという手もあったけど、環境によって必要な時間はいろいろなので。
var t = "win2";
document.form.target = t;
var w = window.open("", t, /* 適宜指定省略 */);
w.onload = function(ff){
return function (){ ff.submit();};
}(document.form) ;
こんばんは。ご回答ありがとうございます。
window.openの目的は、親画面での入力に基づいたサブ情報を子画面で検索→親画面に設定する処理のためでした。
仰られたとおり、子ウィンドウのonLoad処理にてsubmitを行ったところ、問題なく動作することが確認できました。
確かにIE7での新しいウィンドウのオープンは時間がかかっていましたので、やはりタイミングの問題だったのだと思います。
ともあれ、ようやく問題解決できました。ありがとうございました。
参考までに修正内容を記述します。
function action2(){
w = window.open("", 'win2', 'width=400, height=300');
w.onLoad = actionnew("http://www.google.co.jp", "win2");
}
function actionnew(actionname, winname){
document.form.action = actionname;
document.form.target = winname;
document.form.submit();
}
No.3
- 回答日時:
#1です。
>ページ内の押下したボタン/リンクに応じて、それぞれ別の新しいウィンド
>ウにフォームの値を渡して処理を行うプログラムを作成しています。
のところを見落として勘違いしてました。
(POSTの件はそれでわかりました)
であれば、フォームじゃないとうまくいかないので、No1で書いた1行にする案ではダメですね。
スルーしてください。失礼いたしました。
>>#2様
わざわざサンキューです。
この回答への補足
質問の補足
ブラウザまたは環境の問題の可能性が高いようですが、
似たような事象が発生した、解決された方がいらっしゃるかもしれませんので、もう少し質問は〆ないでおかせていただきます。
何かありましたらお願いいたします。
No.2
- 回答日時:
;がないことを除けば
実装自体おかしいところはないわよ。
となると、この場所以外のところに問題があるってことね。
ブラウザの問題とか
ここに記述していないものの問題とか
パソコンにインストールされている何かとか。
>>#1さん
POSTで送信するために
こういう実装をしているのね。
こんにちは。ご回答ありがとうございます。
セミコロンの件は質問投稿時のミスです、ご指摘ありがとうございます。
回答を頂いた後、Chromeで作動させて見たところ、問題なく動かす事ができました。
どうやらご指摘の通りブラウザまたは環境の問題だったようです。
ありがとうございました。
#補足もありがとうございました。
No.1
- 回答日時:
↑でURL指定の行だけ「;」がないのはタイポ?
(URLの前後にスペースが入ってるのは、この掲示板のせいだと思うけど)
>document.form.action = "~ttp://~.yahoo.co.jp";
そこを修正すれば、動くと思いますが? (IE6ですが…)
ところで、わざわざsubmitを使用しているけど、ご質問文で例示のgoogleでは、それで遷移すると「POSTデータは無効です」みたいな表示になっちゃうけど問題ないのかなぁ?
どうせwindow.openを使っているのなら、そこでURL指定してお終いでよいのでは?(1行で終わるし)
window.open("~ttp://~.google.co.jp","win2","width=400,height=300");
action1も
location.href = "~ttp://~.yahoo.co.jp";
の1行ですむはず。
リンクタグとインプットタグが混在している理由が不明ですが、
リンクタグを使うなら、本来の使い方でターゲット指定とURL指定でジャンプできるので、javascriptを使う必要はないし、ボタンもリンクにしておけば、そのままリンクで済むし…
(ボタンは普通にはリンクできなかったっけ?)
また、フォームにしたり、スクリプトにしたりする必然性が不明ですが、どうしてもスクリプトにしたければ、いっそのこと全部<button type="button">みたいなものでも良いのでは?
こんにちは。ご回答ありがとうございます。
セミコロンは質問投稿用に編集した時に消してしまったようです、実ソースでは大丈夫です。
あと、URLも投稿用に適当に変えています。(確かにgoogleでは怒られますね)
一応、URLを変えた後もきちんと動作しなかったことは確認済です。
URL指定の件はaskaaska様が補足してくださった通りです。
>リンクタグとインプットタグが混在
デザイン上の都合とかそんな感じです。説明不足ですみません。
>フォームにしたり、スクリプトにしたり
省略させて頂いていますが、いろいろ他にも処理を行っていますので…。
ご指摘して頂いた箇所以外は特に問題はないと受け取らせて頂きました。
貴重なご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
子windowsからsubmit()後にclose()を実行するとsubmit()が起動しないが発生
JavaScript
-
子ウィンドウより親ウィンドウのフォームをsubmit
Microsoft ASP
-
Javascript_submit()完了後に処理したい
JavaScript
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
添付ファイルの未選択チェック方法
-
ラジオボタンのチェックが外れ...
-
return trueとreturn falseの用...
-
テキストエリアに履歴を残したい
-
SendKeys()が一番最後に実行さ...
-
テーブル列の表示・非表示機能...
-
マウスをブラウザの外に出した...
-
innerHTML内では改行は禁止?
-
クリックされた罫表セルの行番...
-
Selectボックスの一覧表示方法
-
【javascript・PHP】プルダウン...
-
VBScriptでHTMLのセレクトボッ...
-
テキストボックスに入力された...
-
プルダウン 項目が多いので先頭...
-
formのfileの値をhiddenでも持...
-
入力フォームに半角スペース以...
-
JavaScriptで取得した値について
-
JSのボタンを複数う使うには
-
function validateFormについて
-
jquery.csv2table.jsのテーブル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FormのonsubmitでJavaスクリプ...
-
submitした値を返したい
-
javascriptでASPにデータを渡す
-
iframe内のformをサブミットす...
-
javascriptで .jpg , .jpeg , ....
-
POST時に要素を削除してからPOST
-
1つのform内に2つのsubmitボタ...
-
別ウィンドウへのsubmitの挙動...
-
C# 配列などの受け渡し
-
inputのvalueを変数として使うには
-
1つのページにformを2つ設置。2...
-
Chromeで複数submit
-
JavascriptからSubmitして画面...
-
focus()が上手くいかない
-
JavaScript:現在フォーカスの...
-
指定したタグを書き換えるには?
-
suggest.jsに関する質問
-
submitボタン押下後、disabled...
-
input type="image"の時、enter...
-
1つのformで複数のactionをボタ...
おすすめ情報