jquery uiレイアウトプラグインで構築されたページでjquery ui multiselectウィジェットを使用しています。このウィジェットを含むページの一部 (またはサブペイン) はスクロール可能です。そのため、複数選択をクリックすると、ドロップダウンが開きます。ドロップダウンを開いたままスクロールを開始すると、ドロップダウンはその位置にとどまり、ドロップダウンボタンから切り離されます。これを修正するために、その div のスクロール イベントに関数を追加しました。この問題は修正されますが、IE のスクロール パフォーマンスが低下します。コードは次のとおりです。
function initializeMultiSelect() {
$('.dropdown').multiselect({
multiple: false,
// header: 'Select an option',
noneSelectedText: '-Select an option-',
autoOpen:false,
selectedList: 1
}).multiselectfilter();
$('.multidropdown').multiselect({
header: '<a class="ui-multiselect-none" href="#"><span class="ui-icon ui-icon-closethick"></span><span>Uncheck All</span></a>',
noneSelectedText: "Select one or more",
autoOpen:false,
selectedList:25
}).multiselectfilter();
}
function initializeMultiselectFix() {
$(".center-center-center").scroll(function() {
if($('#currentSelectedTab').val() == 1 || $('#currentSelectedTab').val() == 2 || $('#currentSelectedTab').val() == 4 ) {
$(".ui-multiselect-menu:visible").hide();
$(".ui-multiselect:visible").removeClass('ui-state-active');
$(".ui-datepicker:visible").hide();
$(".ui-autocomplete:visible").hide();
<%--if ($(".ui-multiselect-menu").css('display', 'block')) {
$(".ui-multiselect-menu").hide();
$(".ui-multiselect").removeClass('ui-state-active');
}
if ($(".ui-datepicker").css('display', 'block')) {
$(".ui-datepicker").hide();
}
if ($(".ui-autocomplete").css('display', 'block')) {
$(".ui-autocomplete").hide();
} --%>
}
});
}
この分離の問題は、ここで見ることができます: http://layout.jquery-dev.net/demos/datepicker.html テキストボックスをクリックしてスクロールします。
私を正しい方向に向けてください..
編集:わかりましたので、最終的に問題を修正しました。スクロール イベントでメニューを手動で非表示にする代わりに、プラグイン自体を修正することにしました。だから私がしたことはこのようなものでした。
プラグインを変更して、選択メニューを添付して、メニューをドキュメント本文ではなく親 div に追加しました (これがデフォルトの動作です)。
_create 関数で
menu = (this.menu = $('<div />'))
.addClass('ui-multiselect-menu ui-widget ui-widget-content ui-corner-all')
.addClass( o.classes )
.appendTo( o.elementToAttach ),
次に、次のようにオプション配列に elementToAttach プロパティを渡しました。
$('#dropdown').multiselect({
elementToAttach:$('#dropdown').parent()
});
これで問題の一部が修正されました。現在、選択メニューは div でスクロールされていましたが、ドロップダウン ボタンの下に配置されていませんでした。
この配置の問題を修正するために、open function() (選択メニューを開くはずです) を変更しました。ドキュメントですが、ここでは親に対する相対的な位置が必要なので、関数を position() に変更しました。
open: function( e ){
var self = this,
button = this.button,
menu = this.menu,
speed = this.speed,
o = this.options;
// bail if the multiselectopen event returns false, this widget is disabled, or is already open
if( this._trigger('beforeopen') === false || button.hasClass('ui-state-disabled') || this._isOpen ){
return;
}
var $container = menu.find('ul').last(),
effect = o.show,
//the change
pos = button.position();
すべてが正常に機能しているため、これが誰かの助けになることを願っています