1

マージとキャンセルの2つのボタンが入ったFancyboxがあります。キャンセルはファンシーボックスを閉じ、マージはフォームを投稿し、ページがリロードされるのを待ちます。ページがリロードされるまでに数秒かかるため、ユーザーが[マージ]を押した後、[キャンセル]ボタンを無効にし、オプションをに設定したいのmodalですtrueが、既に開いているオプションを設定する方法が見つからないようです。ファンシーボックス。誰かがこれを行う方法について何か提案がありますか?

遊び場: http: //jsfiddle.net/vCtVq/

4

2 に答える 2

3

「モーダル」状態を切り替える簡単なオプションはありません。fancyBoxはモーダルかどうかのどちらかです。しかし、私は2つの解決策を考えることができます。

1)オーバーレイの閉じるボタンを非表示にしてクリックイベントのバインドを解除します-

$('#merge').click(function() {
    $('#cancel').attr("disabled", "disabled");

    $('.fancybox-item').hide();
    $('.fancybox-overlay').unbind();

    console.log('submit');
});

デモ-http://jsfiddle.net/am8d3/

2)グローバル変数を作成し、「beforeClose」コールバックを使用してチェックします。「false」を返すことでクローズをキャンセルできます-

var busy = false;

$(".o").fancybox({
    //modal: true
    beforeClose: function() {
        if (busy) {
            return false;
        }
    }
});

デモ-http://jsfiddle.net/MLjAT/

于 2012-10-31T21:19:02.197 に答える
0

Fancyboxは、関数が実行されると一度初期化され、さまざまなオプションで再初期化することはできません。できることは、フラグを作成し、従来のjavascriptを使用して終了動作を制御することです。最初からモーダルをtrueに設定し、代わりにボディクリックイベントでクローズを処理します。次に、ボディクリックでウィンドウを閉じることができるかどうかを判断するtrue/falseフラグを設定します。このようなもの:

$('body').click(function(e) {    
    if (allowClose == true) {
        $.fancybox.close();
    }
})​

私はあなたがここでこの解決策をいじっているのを更新しました。

于 2012-10-31T16:13:40.560 に答える