5

私のシナリオ:

  1. Dialog1の特定の要素をクリックすると、Dialog2が開きます。

  2. Escapeを押してDialog2を閉じると、期待どおりに機能し、Dialog2を閉じます。

  3. Dialog1は残っており、もう一度Escapeキーを押すと閉じることができると思いますが、そうではありません。最初にダイアログをクリックしてから、Escapeキーを押して閉じる必要があります。

これが私が試したことですが、役に立ちませんでした:

// Array to hold all of our open dialogs id's
var openDialogs = [];

// the open: method in my dialog
open: function() {

    openDialogs[openDialogs.length] = $(this).attr("id");

}

// the close: method in my dialog
close: function() {

    var index = $.inArray($(this).attr("id"), openDialogs),
    $previousDialog = (index > 0) ? $("#" + openDialogs[index]) : undefined;

    // remove the current dialog from the array via Jon Resig's remove() method
    openDialogs.remove(index);          

    // set focus to previously opened dialog
    if ($previousDialog) { $previousDialog.focus(); }

    // I've even tried:
    //
    // if ($previousDialog) { $previousDialog.dialog("moveToTop"); }

}
4

2 に答える 2

4

この行:

var index = $.inArray($(this).attr("id"), openDialogs),
$previousDialog = (index > 0) ? $("#" + openDialogs[index]) : undefined;

現在のダイアログ (閉じているダイアログ)を$previousDialog参照します。閉じているダイアログのインデックスです。index

したがって、この行の後半で:

if ($previousDialog) { $previousDialog.focus(); }

focus()閉じられたダイアログを呼び出しています。

あなたが望むのは次のようなものだと思います:

close: function() {
    var index = $.inArray($(this).attr("id"), openDialogs),
        $previousDialog = (index - 1 >= 0) ? $("#" + openDialogs[index - 1]) : undefined;

    // remove the current dialog from the array via Jon Resig's remove() method
    openDialogs.remove(index);

    // set focus to previously opened dialog
    if ($previousDialog) {
        $previousDialog.focus();
    }
}

これが実際の例です:http://jsfiddle.net/L8J7Y/

$previousDialog.dialog("widget").focus();また、代わりに使用すると、ダイアログの周りに迷惑な点線が表示されるのを回避できることにも気付きました。

于 2011-05-12T01:44:16.497 に答える
0

あなたがこれを入れたクローズ関数でどうですか

 $(".ui-dialog-content").dialog("close");

すべてのダイアログにそのクラスがあるため、すべてのダイアログを閉じます

于 2011-05-12T01:52:15.740 に答える