2

ボタンをクリックしてポップアップウィンドウを開く必要があり、これにはjqueryダイアログを使用しました。

    $(document).ready(function(){
    $("#dialog-form").dialog({
        autoOpen : false,
        height : 300,
        width : 350,
        modal : true,
        buttons : {
            "Add" : function() {
                $("#tag1").text($("#textArea").val());
                $(this).dialog("close");
            },
            Cancel : function() {
                $(this).dialog("close");
            }
        },
        close : function() {
            $("#textArea").val("");
        }
    });

});

    function openWindow(){
        $("#dialog-form").dialog("open");
        statement1;
        statement2;
        }


<button id="add" onclick="openWindow()">Add</button>

ここでの問題は、ボタンをクリックするとダイアログボックスが開きますが、ダイアログボックスにテキストを入力する前に、statement1とstatement2が実行され、フォーカスがダイアログボックスに来ます。

ダイアログボックスが戻った後にのみステートメント1とステートメント2を実行するにはどうすればよいですか?

「追加」関数に statement1 と statement2 を追加したくありません。「追加」機能にステートメントを追加しない理由は、複数のボタンがあり、それぞれが最初にダイアログボックスを開いてから、異なるステートメントのセットを実行する必要があるためです。

4

5 に答える 5

5

簡単な修正は、closeコールバックを使用することです:

$(document).ready(function () {
    $("#dialog-form").dialog({
        autoOpen: false,
        height: 300,
        width: 350,
        modal: true,
        buttons: {
            "Add": function () {
                $("#tag1").text($("#textArea").val());
                $(this).dialog("close");
            },
            Cancel: function () {
                $(this).dialog("close");
            }
        },
        close: function () {
            $("#textArea").val("");
            //statement1 -- won't fire until dialog is closed
            //statement2 -- won't fire until dialog is closed
        }
    });
});

function openWindow() {
    $("#dialog-form").dialog("open");
}

考慮すべきもう1つのことは、$.Deferred

于 2013-03-18T19:18:15.480 に答える
0

私はあなたのための例を持っています:

$(".selector").click(function () {
        var dialog = $('<div title="Title"></div>').dialog({
            open: function (event, ui) {
                $.ajax({
                    url: 'www.google.com.br',

                    cache: false,
                    success: function (html) {
                        $(dialog).html(html);
                    },
                    error: function () {
                        $(dialog).remove();
                        alert("Some Error MSG");
                    }
                });
            },
            close: function () {
                $(dialog).remove();
            },
            resizable: false,
            width: 500,
            modal: true
        });
    });

この場合、ダイアログは開いた後にのみHTML結果を受け取ります。

于 2013-03-18T19:29:58.473 に答える
-1

ダイアログ設定の「open」句の後にコールバック関数を呼び出します。

 modal: true,
 resizable: false,
 resize: 'auto',
 close: dialogCloseFunction,
 **open: function(){if(itemid) {showDailogSides(itemid);}** if(!siteParams[3]) {$(".detailSideClass").hide(); $(".addToChartinDialog").hide();}},
 //hide: {effect: "fadeOut", duration: 5000}
 show: { effect: "fade", duration: 1000 } //drop blind fade fold slide clip
于 2015-01-26T18:03:43.757 に答える