modal=true
でjQuery UIダイアログを使用しています。 ChromeおよびSafariでは、これにより、スクロールバーとカーソルキーによるスクロールが無効になります(マウスホイールとページの上下スクロールは引き続き機能します)。
ダイアログが高すぎて1ページに収まらない場合、これは問題です。ラップトップのユーザーは不満を感じます。
誰かが3か月前にjQueryバグトラッカーでこれを提起しました- http://dev.jqueryui.com/ticket/4671 -修正が優先事項のようではありません。 :)
だから誰もが:
私はフォームのビット上でマウスオーバー/スクロールを実験していますが、それは素晴らしい解決策ではありません:(
EDIT:これに対する解決策を見つけるためにRowan Beentje(SO afaict)にいない)に小道具を提供します。jQueryUIはマウスアップ/マウスダウンイベントをキャプチャしてスクロールするため、以下のコードで修正されるようです。
$("dialogId").dialog({
open: function(event, ui) {
window.setTimeout(function() {
jQuery(document).unbind('mousedown.dialog-overlay')
.unbind('mouseup.dialog-overlay');
}, 100);
},
modal: true
});
自己の責任において使用してください、私はこのものをバインド解除する他の非モーダルな振る舞いが何を許すかもしれないかわかりません。
以前のポスターに同意します。ダイアログが機能しない場合は、デザインを再考することをお勧めします。しかし、私は提案を提供することができます。
スクロール可能なdiv内にダイアログコンテンツを配置できますか?そうすれば、ページ全体をスクロールする必要がなく、div内のコンテンツだけをスクロールする必要があります。この回避策も簡単に実行できます。
このコードを使用できます: jquery.ui.dialog.patch.js
それは私のために問題を解決しました。これがあなたが探しているソリューションであることを願っています。
ダイアログモーダルモードを無効にしてオーバーレイを手動で表示することで、この状況を回避します。
function showPopup()
{
//...
// actionContainer - is a DIV for dialog
if ($.browser.safari == true)
{
// disable modal mode
$("#actionContainer").dialog('option', 'modal', false);
// show overlay div manually
var tempDiv = $("<div id='tempOverlayDiv'></div>");
tempDiv.css("background-color", "#000");
tempDiv.css("opacity", "0.2");
tempDiv.css("position", "absolute");
tempDiv.css("left", 0);
tempDiv.css("top", 0);
tempDiv.css("width", $(document).width());
tempDiv.css("height", $(document).height());
$("body").append(tempDiv);
}
// remove overlay div on dialog close
$("#actionContainer").bind('dialogclose', function(event, ui) {
$("#tempOverlayDiv").remove();
});
//...
}
私の意見では、ビューポートよりも大きなダイアログを作成しないことについては同意しますが、スクロールが必要になる場合があると思います。ダイアログは、1024 x 768を超える解像度では非常に見栄えがするかもしれませんが、それ以下の場合はクランチに見えます。または、たとえば、サイトのヘッダーの上にダイアログを表示したくない場合は、私の場合、FlashのZ-indexの問題が時々発生する広告があるため、ダイアログの上にダイアログを表示したくありません。最後に、スクロールなどの一般的なコントロールをユーザーから排除することは、一般的に悪いことです。これは、ダイアログの大きさとは別の問題です。
なぜこれらのマウスダウンイベントとマウスアップイベントが最初に存在するのかを知りたいと思います。
私はalexis.kennedyが提供するソリューションを試してみましたが、どのブラウザでも表示されるものを壊すことなく機能します。
対話が大きすぎることは、「きちんとしたユーザビリティエクスペリエンス」の要件に反すると思います。 jQuery UI Dialogのバグのために回避策を講じる必要がなかったとしても、私はそのような大きなダイアログを取り除くでしょう。とにかく、私はあなたが適応する必要があるいくつかの「極端な」ケースがあるかもしれないことを理解していますので...
とは言っても、スクリーンショットを添付しておけば、間違いなく役に立ちます。デザインについて質問しているのですが、私たちにはわかりません。ただし、内容を表示できない、または表示したくない場合があるので、それで問題ありません。これらは私のblind推測です。あなたがそれらが役立つことを願っています:
デザインが分からなくて、できる限りのことだと思います。
これは修正されたバグです http://bugs.jqueryui.com/ticket/4671
バインドされたイベントをバインド解除する回避策があります。これにより、ダイアログのopen:イベントに以下が追加されます。
$("#longdialog").dialog({
modal:true,
open: function (event, ui) { window.setTimeout(function () {
jQuery(document).unbind('mousedown.dialog-overlay').unbind('mouseup.dialog-overlay'); }, 100);
}
});
これは動作します...しかし、これは醜いです
--from https://github.com/jquery/jquery-ui/pull/230#issuecomment-3630449
私の場合、魅力のように働きました。
以下のコードを使用してください。正常に動作します。
$("dialogId").dialog({
open: function(event, ui) {
window.setTimeout(function() {
jQuery(document).unbind('mousedown.dialog-overlay')
.unbind('mouseup.dialog-overlay');
}, 100);
},
modal: true,
safariBrowser: (function( $, undefined ) {
if ($.ui && $.ui.dialog) {
$.ui.dialog.overlay.events = $.map('focus,keydown,keypress'.split(','), function(event) { return event + '.dialog-overlay'; }).join(' ');
}
}(jQuery))
});
ダイアログの拡張機能を試しましたか? http://plugins.jquery.com/project/jquery-framedialog