19

ユーザーが入力するまでスクリプトの実行を「ブロック」するカスタムモーダルメッセージを作成することは可能ですか?

たとえば、ネイティブウィンドウのアラート/プロンプト機能を使用せずにこれを実現するにはどうすればよいですか?

setInterval(function(){ 
     alert('Click OK to Continue');  // timing stops until user hits ok
},4000);

カスタムダイアログでユーザー入力に対してコールバック関数を呼び出すことができることは知っていますが、このブロック動作を強制できるようにすることに興味があります

4

3 に答える 3

10

ユーザーが入力するまでスクリプトの実行を「ブロック」するカスタムモーダルメッセージを作成することは可能ですか?

いいえ。ネイティブポップアップほど効果的に実行またはユーザーインタラクションをブロックする方法はありません(カスタムポップアップを使用すると、ユーザーは常に開発者ツールを使用してそれから抜け出すことができるため)。

ただし、pstが質問のコメントで述べているように、非同期ライトボックスは面倒ではなく、ポップアップと同じくらいユーザーの操作をブロックするのに効果的です。したがって、好きなライトボックスを提供するライブラリを見つけて、それを実行することをお勧めします。

たとえば、ネイティブウィンドウのアラート/プロンプト機能を使用せずにこれを実現するにはどうすればよいですか?

そのコードを使用して、ネイティブウィンドウのアラート/プロンプト関数を使用しても、言うことを実行することはできません(このフィドルを参照してください-ポップアップを閉じる前に4秒待ちます)。次のものが必要です。

function timeoutFunction() {
    alert('Click OK to Continue');  // timing ACTUALLY stops until user hits ok
    setTimeout(timeoutFunction, 4000);
}
setTimeout(timeoutFunction,4000);

これは、ネイティブポップアップなしでは実装できないものです(正確には、ライトボックスについては上記を参照してください)。

ループでさえwhile(true)、一般的にポップアップと同様にブロックされません-Firefoxには、少なくとも、長すぎるとポップアップする「スクリプトの停止」メッセージがあり、他の主要なブラウザもそうすると確信しています。

于 2012-11-29T22:02:55.847 に答える
-1

いいえ、できません(少なくともブラウザではできません)。JavascriptAPIはほとんど非同期です。alert/promptは例外です。ただし、非同期プロンプトとコールバックを操作するのはそれほど難しくありません。

于 2012-11-29T21:47:09.253 に答える
-2

少し古いですが、それが役立つ場合は、これで私の解決策を見つけました:

var answer = confirm("are you sure?"); if(!answer)return;

于 2014-08-13T20:58:41.020 に答える