コールバックを保持しながら、JavaScriptのオーバーライドJavaScript確認()

StackOverflow https://stackoverflow.com/questions/3886228

質問


要するに、標準のJSをオーバーライドしたい confirm() jQueryプラグイン内の機能。以下の単純な関数レイアウトでそれを行う方法を見つけました。

function confirm(opts) {
   //code
}

さて、私がやりたいのは、内部の別の関数を呼び出すことです confirm 上記の機能、そうするように...

function confirm(opts) {
   openModal(opts);
}

openModal 関数は、メッセージと必要なボタンを使用してカスタムモーダルウィンドウを開きます。ボタンは両方です <span> とともに id いずれかの submit また cancel. submit 真実を返します cancel falseを返します。しかし、クリックしたボタンに基づいて、どうすればtrueまたはfalseを返すことができますか?

例えば...

$('#openModal').live('click', function() {
   var opts = { title:'Modal Title', message:'This is a modal!' };
   var resp = confirm(opts);
   if(resp) 
      // user clicked <span id="submit"></span>
   else 
      // user clicked <span id="cancel"></span>
});

うまくいけば、あなたは私が何を意味するかを理解しています。

役に立ちましたか?

解決

これ 可能ですが、あなたが説明するとおりではありません。確認機能が使用される典型的な方法は、次のとおりです。

if(confirm("Are you sure you want to submit this form?")) {
    form.submit();
}

上記の例では、ボタンプレスがスクリプトに同期して返されます。ボタンが押されるまで、機能内で実行が一時停止されます。

「モーダルダイアログ」は、HTML Webページのコンテンツ全体に単なるオーバーレイです。ブラウザには、そのようなオーバーレイ内のボタンは、そのページ内の他のどこでもボタンと同じように機能します。

JavaScriptは、このようなボタンクリックを非同期的にクリックするため(つまり、イベントを処理するためにコールバック関数を使用して)同期するのではなく、あなたが試みているアプローチは機能しません。

確認関数を使用してこのように見えるコードのすべての部分を変更する必要があります。

confirm("Are you sure you want to submit this form?", function(result) {
    if(result) {
        form.submit();
    }
});

これは、jquery自体とイベントハンドラーを登録するのと同じように機能します。スクリプトの実行はすぐに続き、匿名関数のすべてのコードを超えてスキップします。後で、ブラウザは、確認関数内で登録するJavaScriptイベントハンドラーを介して間接的にその機能を呼び出します。 true また false 適切に。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top