2

私はちょうどいくつかのコードを書いていましたが、次のような問題に遭遇しました:

alertify.dialog("confirm").set(
{
    'labels':
    {
        ok: 'Personal',
        cancel: 'Share'
    },
    'message': 'Select target:',
    'onok': function()
    {
        alertify.confirm($("#dir_select_user").get(0), function()
        {
            var i = $("#dir_select_user .dir_selector").val();
            t.find(".move_des").val(i);
            t.find(".move_verify").val("1");
            t.submit();
        }).set('labels',
        {
            ok: alertify.defaults.glossary.ok,
            cancel: alertify.defaults.glossary.cancel
        });
    },
    'oncancel': function()
    {
        alertify.confirm($("#dir_select_share").get(0), function()
        {
            var i = $("#dir_select_share .dir_selector").val();
            t.find(".move_des").val(i);
            t.find(".move_verify").val("1");
            t.submit();
        }).set('labels',
        {
            ok: alertify.defaults.glossary.ok,
            cancel: alertify.defaults.glossary.cancel
        });
    }
})   }).show();

http://alertifyjs.comalertifyjsのライブラリを使用します( http://fabien-d.github.io/alertify.js/からではありません)。

このコードを試すと、personalまたはを選択すると、「onok」および「oncancel」ダイアログがすぐに消えることがわかりますshare

ここで何が問題なのですか?どうすれば解決できますか?

4

1 に答える 1

1

問題の原因は、閉じている間に同じダイアログを再度表示しようとしていることにあります。デフォルトの AlertifyJS ダイアログはすべてシングルトンです (常に 1 つのインスタンス)。

これには 2 つの解決策があります。

  1. 最初の確認が実際に閉じられるまで、2 番目の確認の表示を遅らせます。

    alertify.confirm("confirm ? ", 
        function onOk() {
            //delay showing the confirm again 
            //till the first confirm is actually closed.
            setTimeout(function () {
                alertify.confirm("confirm another time ?");
            }, 100);
        },
        function onCancel() {
            //no delay, this will fail to show!
            alertify.confirm("this will not be shown!");
        }
    );
    
  2. 独自の一時的な (マルチインスタンス) 確認を作成し、既存のものから継承するだけです。

    // transient (multi-instance)
    alertify.dialog('myConfirm', function factory(){ return {};},true,'confirm');
    alertify.myConfirm("confirm ? ", function(){
        alertify.myConfirm("confirm another time ?");
    });
    

    注:これには注意してください。一時的なダイアログを呼び出すたびに新しいインスタンスが作成されるため、起動したインスタンスへの参照を保存して再利用することができます。

ここでデモを参照してください。

于 2015-02-02T14:55:54.220 に答える