7


confirm()要するに、jQueryプラグイン内 の標準のjs関数をオーバーライドしたいと思います。以下の簡単な関数レイアウトでそれを行う方法を理解しました。

function confirm(opts) {
   //code
}

さて、私がやりたいのは、confirm上記の関数内で別の関数を呼び出すことです。

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

このopenModal関数は、メッセージと必要なボタンを含むカスタムモーダルウィンドウを開きます。ボタンは両方とも<span>またはidのいずれsubmitcancelです。submittrueを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>
});

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

4

1 に答える 1

17

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

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

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

「モーダルダイアログ」は、HTMLWebページのコンテンツ全体をオーバーレイするだけです。ブラウザにとって、このようなオーバーレイ内のボタンは、そのページ内の他の場所のボタンと同じように機能します。

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

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

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

これは、イベントハンドラーをjQuery自体に登録するのと同じように機能します。スクリプトの実行はすぐに続行され、無名関数のすべてのコードをスキップします。true後で、ブラウザは、confirm関数内に登録したJavaScriptイベントハンドラを介してその関数を間接的に呼び出します。その目的は、いずれかまたは必要に応じてコールバック関数を呼び出すfalseことです。

于 2010-10-08T00:33:10.723 に答える