7

jquery ダイアログ ウィジェットを使用してモーダル ボックスを表示しています。ただし、モーダルが開いている間に F5 を押すと、更新は行われません。何か案が?

興味深いアップデート:

このデモを試してください: http://jqueryui.com/demos/dialog/#modal-message フォーカスが「OK」ボタンにある場合、更新 (F5) は機能しますが、ボタンにフォーカスがない場合は、そうではありません。

更新 2

実際には、ダイアログに任意の種類のコントロールを追加し、高さと幅を 0 css に設定し、それにフォーカスを設定して更新を機能させることができます。ただし、これは最善の解決策ではありません。私はまだキープレスを機能させようとしています。

アップデート 3

以下は今のところうまくいくようです:

$(document).keydown(function(e)
{
    if (e.which == 116) // key code of the F5 button
    {
        document.location.reload();
     }
}); 
4

4 に答える 4

6

これはよくある問題のようで、満足のいく答えは見たことがありません。Stack Overflow にも同様の質問がいくつかありますが、私が見た最良の答えは、キーをキャプチャして自分でアクションをトリガーすることです (これは Enter キーでボタンをトリガーするためのものだったので、f5 で更新するのは難しいかもしれません)。私も取り組んでいるプロジェクト。

modal を false に設定すると役立つと思いますが、まだ試していません。

編集:

これは、ui.dialog.js の 539 行目にあります。

events: $.map('focus,mousedown,mouseup,keydown,keypress,click'.split(','),

そこからキーダウンとキープレスを削除すると、通常のブラウザキーが機能するようになりました。今私のように見えます:

events: $.map('focus,mousedown,mouseup,click'.split(','),

これを行うことでどの機能が削除されるかわかりません。イベントが使用されているように見える唯一の場所は、549 行目です。

$(document).bind($.ui.dialog.overlay.events, function(event) {
    var dialogZ = $(event.target).parents('.ui-dialog').css('zIndex') || 0;
    return (dialogZ > $.ui.dialog.overlay.maxZ);
});

できれば正式版で修正してほしいです。

于 2010-01-05T17:07:44.560 に答える
0

同様の問題が発生しましたが、他のすべてのキーの登録を停止する「returnfalse;」を入力したことがわかりました。たとえば、以下の「return false」は、xxxとyyyを除く他のすべてのキー(F5など)の認識を停止します。

$(document).keydown(function(e){
if (e.keyCode == xxx) {/*do something*/}
if (e.keyCode == yyy) {/*do something*/}
return false;
});

したがって、「falseを返す」を削除するだけです。

于 2010-03-05T10:08:11.777 に答える
0

解決策は簡単です。モーダル ダイアログ ボックスのフォーム要素に注目するだけです。このリンクの詳細説明:

于 2010-12-19T06:44:50.927 に答える
0

キープレス イベントをキャプチャし、'F5' の伝達を停止することによって、ダイアログ ボックスは F5 キーを無効にしていますか?

この種のキープレス キャプチャのコードを確認してください。これは多くを説明するでしょう!

于 2010-01-05T17:07:18.647 に答える