• 締切済み

Javascriptでconfirmの戻り値を取得したい

こんにちは。 Javascriptで独自confirmを表示し「はい・いいえ」で、後の処理を実行させたいのですが、無限ループに陥ってブラウザでscriptを停止するよう求められてしまいます。 var bb = dojoDialogConfirm("ログアウトしてよろしいですか?"); while(true) {  inv = setInterval("", 1000);  if (bb && bb == true) {   window.location = 'logout.action';   clearInterval(inv);   break;  } else if (bb = false) {   clearInterval(inv);   break;  } } window.confirmのようにJavascriptは待たないので、bbの戻り値(true or false)を取得する前にScriptは走り、bbにtrue falseどちらかが、入力された時点で処理を実行させているつもりなのですが。 どこが悪いのでしょうか?よろしくお願いします。

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

while(true) でなくて単にsetIntervalやsetTimeoutで再帰的に処理を すればいいのでは?

bobo39
質問者

補足

ありがとうございます。 こんな感じになるのでしょうか? callbackfunctionにすると、インスタンスを再取得しなければいけない為、何とか同期を取りたいのですが・・。 var ret = null; function dojoDialogConfirm(_msg) {  if (ret) {   window.location = 'logout.action';   clearInterval(ret);   ret = null;  } else if(ret == "false") {   clearInterval(ret);   ret = null;  } else {   画面.show();   setInterval(dojoDialogConfirm("ログアウトしてよろしいですか?"), 1000)  } } dojoDialogConfirm_onClick(val) {  // val = true or false  ret = val; }

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

同期式で良いなら何故、confirmを使わず、独自処理にしているので しょう? dojoDialogConfirmの中が分からないので何とも言えませんが、 処理内容が単純ならdojoDialogConfirmの方で始末しては? いずれにしても応答を待たずに制御が返ってくる以上、戻り値は 使えません。

bobo39
質問者

補足

ありがとうございます。 申し訳ありません。dojoDialogConfirmについて書いてませんでしたが、Dojo1.3のUIライブラリのDialogを使って、画面ファイルを取得して(Ajax)、レイアウトの自由度を持ちたいのが理由です(Flashでやるのが一番良いかもしれませんが)。また、confirmの機能に限らず、選択ボックス・テキストなど自由に追加できるようにするのが最終的な狙いです。 現在、callbackにて、一応動作はできていますが、ロジックが煩雑になるのと、親画面の変数を取得しなおさなければいけないという事で、同期の方法を探っています。 window.confirmはユーザがはい、いいえどっちを選んだかをwaitしてくれるのですが、そのような動作をScriptOnlyで何とか実現できないかと悩んでおります。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

まず、ポーリング的に変数内容を確かめる行為がWindowsにマッチ していません。while(true)以下のループがタイムスライスを独占 しているので、ブラウザは何も出来ません。Confirmへの応答も イベントを受け付けるためのタイムスライスが得られないため、 動作しないでしょう。(処理内容が不明なので想像ですが) setIntervalはタイマを仕掛けるだけで、Sleepしません。と言って Sleepしたとしてもタイムスライスは解放しないので、同じですが・・・ 変数bbは共通変数になっているのですか?(だとすると、定義が おかしい気がします。)dojoDialogConfirmから見えない変数なら 変更のしようがありません。最初の戻り値のままです。 >if (bb && bb == true) { 意味が良く分かりません。 if ( bb ) なのでは? dojoDialogConfirm("ログアウトしてよろしいですか?"); inv = setInterval("tmOut", 1000); //★ここで処理は終了(タイムスライスを解放する) function tmOut() {   clearInterval(inv); //ここでタイムアウトの処理 } dojoDialogConfirmが応答を受け取った時、どうやって呼び出し元に 伝えるつもりなんでしょう?(勿論、非同期では戻り値で伝える ことはできません)

bobo39
質問者

補足

ありがとうございます。 何とか同期でdojoDialogConfirm("ログアウトしてよろしいですか?"); の返却値を取得したいのですが、無理なのでしょうか? 現在callbackで動いてますが、グローバル変数等event取得の処理もあり、何とか同期で取得したいのですが・・。

関連するQ&A

  • javascriptのconfirmについて

    javascriptのconfirmが実行されると確認ダイアログボックスが表示されるはずですが、 何故か何も表示されず、必ずfalseを通ります。 かなり初心者的ミスを侵している気がしますが、調べても分からなかったので、 どなたかご教授頂ければ幸いです。記述したソースは以下になります。 headタグ内 <script type="text/javascript"> <!-- function confirm(s){ if(window.confirm('実行します')){ location.href = "/?flg="+s; } return false; } // --> </script> ■bodyタグ内 <a href="javascript:confirm('1');return false;">テスト</a>

  • Javascriptでどうしてもうまく動きません・・・

    いつもお世話になってます! ある編集ページがあって、登録ボタンを押すと、入力漏れ等チェックして、問題なければ「登録します。よろしいですか?」と表示させ、OKなら処理ページへ移動させます。NGなら、確認窓を閉じます。 そこに、"del_chk"というチェックボックスを作り、そのチェックボックスをチェックして登録ボタンを押すと、「このレコードを削除します。よろしいですか?」と表示させ、OKなら、再度「本当に削除します。よろしいですか??」と表示させ、OKなら、処理ページへ移動させます。ただし、NGを押せば、押した時点で確認窓を閉じさせたいのです。 そこで、JavaScriptを考えてみましたが、何も確認窓がでてこず、困っています。。。 どこが間違えているのかわかりません。。どなたか添削をお願い致します。 <script type="text/javascript"> <!-- function FormCheck(){ //すべて異常ないとき if(!document.form.del_chk.checked){ if(confirm("登録します。よろしいですか?")){ return true; break; }else{ return false; break; } }else{ if(confirm('削除します。よろしいですか?')){ if(confirm("本当に削除します。よろしいですか??")){ return true; break; }else{ return false; break; } } } return true; } //--></script> <formタグの所に、onsubmit="return FormCheck();"を付け加えています。 すみません、よろしくお願いします。 (あと、わかればこれも・・・ <formタグを<td>の中などで使うと、表示がずれるのですが、なにかわかればこちらもよろしくお願いします。たとえば、行の高さが異様に膨らんだり・・・)

  • JavaScript ログアウト処理

    JavaScriptでログアウト処理を作成中です。 <script Language="JavaScript"> <!-- function checklogout(){ //n_logout オブジェクトを参照 if(!document.n_logout.checked){ window.alert("本当にログアウトしますか?"); return true; } else{ return false; } } //--> </script> <a href="~.php"><img src="botton.gif" name="n_logout" onClick="return checklogout()"> 現状では、『本当にログアウトしますか?』に対して、 alert 上では 『OK』 ボタンしか表示されません。 これを Yes か No でユーザーに処理させるように改良したい。 アドバイスよろしくお願い致します。

  • javascript関数の戻り値でphpの条件分岐

    こんばんは。 またまたプログラミングで詰まってしまいました・・・。 <?php    echo "<script> funcJS(); </script>"; //javascriptの関数。戻り値true/false    if(funcJS()の戻り値がtrueかどうか){       <~phpの処理~>     } ?> のようなプログラムがあったとして、funcJS()の戻り値の値によって、『phpの処理』を行うかどうかを決定したいのですがそのアルゴリズムが思いつきません。 色々と試行錯誤はやってみて、 (1)phpの変数にfuncJS()の戻り値を格納して、if文で条件分岐  $value = "<script> funcJS(); </script>";   しかし、これは$valueに戻り値を入れることができませんでした。 (2)javascript変数に戻り値を格納して、javascript内のif文で条件分岐 <?php    echo "<script> var value=funcJS(); </script>"; //javascriptの関数。戻り値true/false    echo "<script> if(value == 'true'){ </script>";       <~phpの処理~>    echo "<script> } </script>"; ?>  これも"}"がないと怒られてしまいました。 自分で思いつく限りは試してみたのですが、他に方法が思い浮かばず頭を抱えている状態です。 何か良い方法を知っている方、思いついた方、よろしくお願いします。

  • javascript confirmでFORM送信

    javascript confirmにて「この点数で良ければ送信する」というものを考えています。 この点数部分は変数になる予定であり、javascript内部で生成されます。 まずは、変数ではなく固定値として、javascriptの中にある数値を<form></form>の中に生成することを考えましたがいきなりつまずきました。 「100という数値を送信」するつもりだったのですが、うまく送信することが出来ません。 どこを修正すればいいかご教示いただきたくお願いいたします。 <html> <head> <title>submit</title> </head> <script language="javascript"> <!-- function frmSubmit() { var errFlag=true; if(errFlag==false) { return; } if(confirm("100点です。送信しますか?")) { document.frm.submit(); document.getElementById("plus").value ="100"; } else { } } //--> </script> <body> <form method="post" action="form.cgi" name="frm" target="_self"> <input type="HIDDEN" id="plus" value="" /><br /> <input type="button" value="send" onclick="frmSubmit();"> </form> </body> </html>

  • JAVASCRIPT

    JAVASCRIPT内にwindow.confirmの中にPHPを入れたい。どうしたらいいでしょうか? <script> function onClickSave() { if(document.form.reportValidity() && window.confirm('<?php echo $PASSSWRD_CHANGE[STR_PASSWD_UPDATE] ?>)'){ document.form.submit(); } } </script>

  • 条件により処理を中断させる方法

    下記のようなコードで、ある条件のときに処理を中断するという処理を書きたいと思っています。条件はループ処理の中で変化する変数の状態を検知するのではなく、処理の外部の状況を条件にしたいと思っています。 例えば「1秒たっても終わっていなかったら中断」という様にしたいと思っています。 ※最初は「特定のキーが押されたら中断」などというようにしたかったのですが。 しかしうまくいきません…。下記のコードではIE8, FirFox, Chromeすべて駄目でした。とりあえずIE8だけでも、さらに言えばHTA限定でもOKです。 何とかならないものでしょうか?「このような処理は不可能だ」という情報でも、あきらめることができるためありがたいです。 よろしくお願いします。 <html> <input type="button" id="btn"> <script> document.getElementById("btn").onclick = function() { var flg = false; var tid = window.setInterval(function() {flg = true;}, 1000); for (var i = 0; 80000 > i; i++) { if (flg) { window.clearInterval(tid); alert("break"); break; } document.getElementById("btn").value = i; } alert("finish"); }; </script> </html>

  • confirmで選択してsubmitする内容を変える

    confirmで確認して「OK」なら普通にsubmitさせ、「キャンセル」なら、パラメーターを変更して実行させたいのですがアドバイスを。kubun=gakuseiは前ページから引いて来ています。★の部分はやりたいことを書いただけですが、このようなことを実行するにはどうしたらよいでしょうか。cgiだけではできるのですが、javascriptが混じると混乱状態・・。 <script language="JavaScript"> function myEnter(){ myRet = confirm("本当に学生ですか"); if ( myRet == true ) {★sample.cgi?kubun=gakusei]実行★;} else {★sample.cgi?kubun=sonota]実行★;} } </script> <FORM ACTION="sample.cgi" METHOD="POST"> <input type="text" name="氏名"> <INPUT TYPE="SUBMIT" onclick="myEnter()"></form>

  • JavaScript 遷移中止できない

    下記のようなコードで 「本当に画面遷移してもいいですか?」にいいえを答えたら、 falseが返され、遷移が中断されるようにしたかったのですが、 遷移してしまいます。 なぜか考えてもわからないので、ご存知の方がいたら教えて頂きたいです。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> </head> <body> <a href="https://www.--------">サイトへ遷移します</a> <script language="javascript" type="text/javascript"> function func_check(){ if( confirm("本当に画面遷移してもいいですか?") ) { return true; } else { return false; } } </script> </body> </html>

  • JSのWINOW.CONFIRMの戻り値をPHPで受け取れる?

    お世話になります。 数日前に質問させて頂いた者です。 JSでCONFIRMを使って メッセージを表示する方法は分かったのですが・・ その戻り値(TRUE、FALSE)から PHP(MYSQLのクエリ)を実行したい のですが、可能なのでしょか? (↑レンタルサーバでは、らしいこと が実行されています) 戻り値からリンクを貼ろうと 考えたのですが、クエリの内容が(PHPの) JSからのリンクでは渡らないようなので。 すいません、単純にPHP同士でセッション関数 を使えばできるのはわかってるのですが。 あまり画面を遷移させたくないので。 宜しくお願い致します。

    • ベストアンサー
    • PHP