2

ユーザーがダイアログを開くと、処理する必要がある多数の ajax リクエストがあるため、ロード情報を表示するだけの 2 番目のダイアログがあり、すべてのリクエストが処理されると閉じます。

ユーザーが開いたダイアログを一度開いたら、Escape キーで閉じることができません。エスケープを使用する前に、ダイアログ自体をクリックする必要があります。

ロードダイアログが閉じた後にユーザーが開いたダイアログにフォーカスを割り当てるために次のことを試みましたが、役に立ちませんでした。エスケープキーで閉じる前にダイアログをクリックする必要があります。

$(document).ajaxStart(function () {
    // IF loading dialog is not allready being shown show it.
    if ($("#LoadingData").dialog('isOpen') === false) {
        $("#LoadingData").dialog('open');
    }
});

$(document).ajaxStop(function () {
    //Close the loading dialog once the requests have finished
    $("#LoadingData").dialog('close');
    //Find the user opened dialog
    $('.cmdialog').each(function () {
        if ($(this).dialog('isOpen')) {
            $(this).trigger('click');//set focus to dialog 
            // have also replaced .trigger('click') with .focus() but to no avail
        }
    }).on('click', function() {   
       //if click is triggerd set the focus of the dialog. 
        if ($(this).prop('id') != 'LoadingData') {
            $(this).focus();
        }
    });
});

ダイアログ内の最初の要素にフォーカスを設定しようとしまし$('#DialogName:first-child').focus()$('#DialogName:first-child').trigger('click')が、これも機能しません。

フォーカスが設定されていない理由について何か考えはありますか? .focus()または、 andを誤解/誤って使用してい.trigger('event')ますか?

ありがとう :)

4

4 に答える 4

0

focus イベントは、要素がフォーカスを取得したときに要素に送信されます。このイベントは、フォーム要素 (、など) やリンクなど、限られた一連の要素に暗黙的に適用されます。ドキュメントはこちら

ダイアログの moveToTop メソッドを試すことができます。

そして、あなたのコードでは、トリガーする前に「クリック」イベントをバインドする必要があると思います。

于 2013-11-14T10:20:58.207 に答える