0

jQuery UI ダイアログがあります。

$("#dialog").dialog({
    modal: true,
    closeOnEscape: false,
    resizable: false,
    autoOpen: false,
    open: function() {
        $(".ui-dialog-titlebar").hide();
    }
});

AJAX 呼び出しの直前にこのダイアログを開こうとしています。alertFirefox を使用して動作しますが、ダイアログを開いた直後に , を入力しない限り、IE では開きません。誰でも何が問題なのか教えてもらえますか? 次のコードを使用しています。

$("button").click(function() {
    $("#dialog").dialog('open');
    //alert('test'); //if I put this alert, the dialog will open
    $.ajax({
        type: "POST",
        url: "testing.txt",
        async: false,
        dataType: "text",
        success: function(returnText) {
            $("#dialog").dialog('close');
            $("#textarea").text(returnText);
        },
        error: function() {
            $("#dialog").dialog('close');
        }
    });
});
4

2 に答える 2

4

openイベントは潜在的なアニメーションのために非同期で完了するため、IE の JavaScript 解釈が遅いため、 または コールバック (これも非同期です) でダイアログを閉じるコードが の近くで実行されている可能性がsuccessありerrorます open。ダイアログが開いていることに注意してください。あなたの AJAX 呼び出しは非常に迅速に完了していると思います。

setTimeoutこれを回避する 1 つの方法は、AJAX 呼び出しをブロックに入れることです。

$("button").click(function() {
    $("#dialog").dialog('open');

    setTimeout(function() {
        $.ajax({
            type: "POST",
            url: "testing.txt",
            async: false,
            dataType: "text",
            success: function(returnText) {
                $("#dialog").dialog('close');
                $("#textarea").text(returnText);
            },
            error: function() {
                $("#dialog").dialog('close');
            }
        });
    }, 1);
});

$.ajaxこれは単に呼び出しをキューに入れ、openイベントを完了できるようにします。John Resig は、なぜこの種のことが機能するのかについて、 http: //ejohn.org/blog/how-javascript-timers-work/ に詳しく書いています。

于 2012-07-12T10:28:09.563 に答える
1

この問題を解決する別の方法は、クリックの代わりに「dialog.open」部分をマウスダウン イベントに配置することです。そうすれば、ファイルのダウンロードなど、IE(8) が setTimeout に入れたときに好まないことを行うことができます。

于 2012-07-27T17:42:34.643 に答える