window.open とtarget属性について

このQ&Aのポイント
  • window.openとtarget属性に関する問題について質問いたします。
  • 現在のソースコードでは、フォームの入力状態によってwindow.openするかどうか判定していますが、target属性が影響してエラー時の表示や値の受け渡しがうまくいかない状況です。
  • 解決策を探していますので、うまく切り替えるための方法やアイデアがあれば教えていただきたいです。
回答を見る
  • ベストアンサー

window.open とtarget属性について

お疲れ様です。 いつもお世話になっています。 以前 http://okwave.jp/qa4125614.html で質問させていただいた件に関することなのですが、 現状のソース function chk(){ var k=0; var i; for(i=0;i<6;i++){ if(document.form1.elements[i].value ==''){ k++; } } if(k == 0 || k==3 || k==6){ window.open('','nWin','width=640,height=320'); }else{ alert('エラーですよ'); } } ---------- <form onsubmit="chk();" name="form1" target="nWin" action="xxx.php" method="post"> <input type="text">が6こ <input type="submit"> </form> で、今フォームの中のnullの数によって、window.openを実行させるかさせないかの実装をしています。 正常フローでwindow.openは発動するのですが、target属性がformに入っているおかげで、エラーでもwindowが新しく開いてしまいます。 targetを消せば、エラーの際はwindowは開きませんが、正常フローの際、windowは開きますが、値がわたりません(親windowに表示されてしまう) あちらをたてればこちらがたたず状態です。 正常フローのときは 子windowが開く 子windowに値がわたり、子windowに表示される エラーのときは 子windowは開かない 親windowにエラーメッセージを表示させる(とりあえずalertでよい) という切り替えをうまくするにはtarget属性をなんとかする以外ないと思うのですが、どうすればうまくいくのか頭を抱えている状態です。 恐れ入りますが、よい案があれば教えていただきたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

formのonsubmitを onsubmit="return chk();" として chk()から抜ける際に 正常終了の場合true,エラーの場合falseを返すようにしましょう function chk(){   var k=0;   var i;   for(i=0;i<6;i++){     if(document.form1.elements[i].value ==''){       k++;     }   }   if(k == 0 || k==3 || k==6){     window.open('','nWin','width=640,height=320');   }else{     alert('エラーですよ');     // エラーなのでsubmitを実行しないようにする     return false;   }   // 正規の終了   return true; } # 字下げには全角スペースを使用しています

nyalio
質問者

補足

すばらしい!

関連するQ&A

  • open.window(javascript) を使わないで、新規windowを3つ開く方法

    JavaScpript の open.window を使うと、値がGET で渡ってしまいます。 POST でデータを渡したいので、FORM で window を 3つ開く方法って ないでしょうか? <FORM method=POST name=form1 target="window1" ACTION="/cgi-bin/search1.pl"> <input type="text" name="searchword1"> </form> <FORM method=POST name=form1 target="window2" ACTION="/cgi-bin/search2.pl"> <input type="text" name="searchword2"> </form> <FORM method=POST name=form1 target="window3" ACTION="/cgi-bin/search3.pl"> <input type="text" name="searchword3"> </form> の 3 つのフォームを 1 つの <input type="submit" name="Search" value=" 検索 "> で起動させるってことです。 (または、open.windows で値を渡すとき、POST で渡したい) よろしくお願いします。

    • ベストアンサー
    • CGI
  • window.openの使い方

    このようなスクリプトが動かないのは何故なのでしょう? <html> <script> var URL = "http://okweb.jp/"; GetW = window.open(URL,"Gets"); alert(GetW.document.readyState); </script> </html>

  • <FORM>タグのtargetに値を書込む方法を教えて下さい

    送信ボタンを押すとtargetの値をとれず、javascriptエラーになります。 「引数は無効です」と表示されます。 SUBMITした時にmake_newwin(f)を動作しようとしているのですが、 うまくtargetが取れません。 targetには、親ウィンドウ名を書き込みたいのです。 何か良い方法ありましたら、教えて下さい。 <script language="javascript" type="text/javascript"> <!-- function make_newwin(f) { alert(f) …ここで内容を表示したところ[object]と表示されました。   var w = window.open('about:blank', f.target);    w.focus(); window.close(); } <FORM name="test" action="/cgi-bin/test.cgi" method="post" target="" onSubmit="make_newwin(this);"> <input name = "aaa" type = "hidden" value ="10000" >        : </FORM> </BODY> <script> document.test.target=opener.window.top.name; </script> </HTML>

  • window openについて

    こんにちは、例えば以下のようなスクリプトがあったとします。 <html> <form name = serchform> <input type=text name=id><br> <input type=submit value=ID検索 onclick="openwin()"> <a href="javascript:open(1);"><Img Src="1.bmp"></a><br> <a href="javascript:open(2);"><Img Src="2.bmp"></a><br> <script type="text/javascript"><!-- function openwin() { a = document.serchform.id.value; url = "http://10.8.2.166/test/syuhou_kensaku.php?id="+a; mywin = window.open(url,"","width=1120,height=500"); } function open(select) { if(aa == 1){ alert("Test") url2="http://10.8.2.166/test/kensaku.php?msg="+Testです; mywin2 = window.open(url2,"",""); } } //--></script> このソースを実行すると、ID検索ボタンをクリックしても何も反応せず 1.bmpをクリックすると、Testとメッセージが表示され、画面左下に 警告マークが表示され、何も反応しません。 しかし、function open(select)を削除し、ID検索ボタンをクリック すると命令した処理を実行してくれます。 function openwin()を削除したらその逆も起きるのかと考えやって みたのですが、これについては上記と同じエラーでした。 なぜこのようになるのか原因が分かりません。 どなたかご存知の方がいらっしゃいましたら、アドバイスよろしく お願い致します。

  • フォームオブジェクトのtargetプロパティ

    cakephpとjavascriptを使っています。 window.openで子画面を出し、子画面上の例えば[設定]ボタンを押した時に子画面を閉じ、 子画面上のフォームの値を、親画面に反映させたいため調べてなんとか出来ました。 子画面の方でdocument.form.target = 'parent';に設定しただけで出来たので結果はいいのですが、 targetを設定しない場合でも、親画面でデータが取得できているのに表示出来なかったのが、 納得いかなくて質問しました。 function [設定]ボタンで呼ばれる関数(){ document.form.action = "/~/TestController/input"; 省略しています     ☆document.form.target = 'parent';  document.form.submit(); window.close(); } ☆の行がない場合でも、 TestController内のinputメソッドでは$this->dataにフォームの値は入っていましたし、 当然親画面のinput.ctpでも$this->dataにフォームの値が入っていました。 なのに、表示出来なかったのが納得がいきません。 そうゆうもんだからと言われればそれまでですが、 きちんと理解しておきたいので、よろしくお願いいたします。

    • 締切済み
    • PHP
  • rel属性を複数使用したい

    XHTML 1.0 Strictなのでtarget="_blank"の代用で外部jsに function externalLinks() { if (!document.getElementsByTagName) return; var anchors = document.getElementsByTagName("a"); for (var i=0; i<anchors.length; i++) { var anchor = anchors[i]; if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") anchor.target = "_blank"; } } window.onload=externalLinks; として読み込みリンクに<a rel="external" ..........>としています。 その他にhighslide.jsを使用しているのですがrel属性が重複しているためか highslide.jsの動作は正常なのですがtarget="_blank"の代用の効果がありません。 rel属性が重ならないようにしたいのですが解決策はありますでしょうか? highslide.jsのURLです↓ http://vikjavev.no/highslide/

  • windowオブジェクトの操作

    登録フォームを作成しています。 登録内容に誤りがなければ次のページへ飛び、登録内容に誤りがある場合は再度同じページで登録させる(次のページにはいかないようにさせたい。)というふうにしたいのですがどうすればよいでしょうか? function mailcheck(){ var tmail = document.form.temail.value; var mail = document.form.email.value; if(tmail != mail){ window.alert("E-Mailが一致しません!"); ★ } else if((tmail == "") | (mail == "")){ window.alert("E-Mail記入されていません! "); ★ } } <input type="submit" value="確認" name="submit" onclick="mailcheck()"> この場合は★マークの所でwindowオブジェクトだけで操作できるのでしょうか?

  • <a target=_blank>とJavaScriptのwindow.open()の違い

    Servlet+RDBでWebシステムを作っています。 セッションを取って、LastAccessTimeなどでユーザーを管理しているのですが、ある場面で別ウインドウを出したいと思っています。<a target=_blank>だとうまくいくのにwindow.open()だとリンク先は同じでもエラーとなってしまいますが、この2つにどのような差があるかご存知でしたら教えてください。 window.open()の方が使い勝手がいいのでこちらを使いたいのですが、やむを得ずAタグで新規に開いてからリサイズを行っています。本来新ウインドウに名前をつけたいのですが、Aタグでは無理でしょうか。こちらもわかる方がいたらお願いします。

    • ベストアンサー
    • Java
  • IE7でのwindow.close後のwindow.openについて

    javascriptで、ボタンクリックでウィンドウを開くときに、同じ名前のウィンドウが既に開いていたら一回閉じで、開き直すというロジックを書いてます。 これはIE6では正常に動いているのですが、IE7になると、ウィンドウが閉じたまま、開き直さないで何も表示されなくなってしまいます。たまに開くときもあるのですが。 ボタンクリック後のコードを載せます。 ちゃんと開く方法はないでしょうか? function openwindow(){ var newWindow = window.open("test.html", "test"); if(newWindow.name == "test") { newWindow.close(); } oneScdWindow=window.open("test.html", "test"); }

  • 子ウィンドウのフォームにアクセスすることはできますか?

    親ウィンドウから,子ウィンドウを生成し,子ウィンドウ内のフォームの値を設定・参照することは可能でしょうか. ローカル内であればできそうな気もするのですが,以下の条件が有り,これを突破する方法が分かりません. ・子ウィンドウの内容は一般サイト(YahooだったりGoogleだったり,一定ではない) ・上記の理由で,formタグにname属性やid属性などが無い場合がある. サンプルで試したソースは以下の通りです. <html> <head> <title>JS test</title> </head> <body> <script type="text/javascript"><!-- function alert_d() { // alert("OK"); alert(target.sf1.p.value); } function newWindow() { target = window.open( "http://www.yahoo.co.jp", "target", "" ); } --></script> <input type="button" value="ダイアログ" onClick="alert_d();"> <input type="button" value="新規ウィンドウ" onClick="newWindow();"> </body> </html> 新規ウィンドウボタンでYahooを表示させた後,ダイアログボタンをクリックすると以下のエラーが発生します. Permission denied for <http://localhost> to get property Window.sf1 from <http://www.yahoo.co.jp>. http://localhost/test_js/ Line 9 これはやはりセキュリティ上の制限であり,実現は不可能ということでしょうか?

専門家に質問してみよう