コールバックを保持しながら、JavaScriptのオーバーライドJavaScript確認()
-
28-09-2019 - |
質問
要するに、標準の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
適切に。