Skip to content

Commit 4957cfc

Browse files
committed
Follow jQuery stacking elements behavior.
A better solution to #675 Fix #494 The behavior we were using for appendTo was incorrect, we should have been modeling it on the stacking documentation: https://api.jqueryui.com/theming/stacking-elements/ I alphabetized the properties in the multiselect css file becuase that kind of thing makes me happy.
1 parent db81ce7 commit 4957cfc

File tree

2 files changed

+30
-18
lines changed

2 files changed

+30
-18
lines changed

jquery.multiselect.css

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
11
.ui-multiselect { padding:2px 0 2px 4px; text-align:left }
22
.ui-multiselect span.ui-icon { float:right }
3-
.ui-multiselect-single .ui-multiselect-checkboxes input { position:absolute !important; top: auto !important; left:-9999px; }
3+
.ui-multiselect-single .ui-multiselect-checkboxes input { left:-9999px; position:absolute !important; top: auto !important; }
44
.ui-multiselect-single .ui-multiselect-checkboxes label { padding:5px !important }
55

6-
.ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 4px }
6+
.ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 4px; }
77
.ui-multiselect-header ul { font-size:0.9em }
8-
.ui-multiselect-header ul li { float:left; padding:0 10px 0 0 }
9-
.ui-multiselect-header a { text-decoration:none }
10-
.ui-multiselect-header a:hover { text-decoration:underline }
11-
.ui-multiselect-header span.ui-icon { float:left }
12-
.ui-multiselect-header li.ui-multiselect-close { float:right; text-align:right; padding-right:0 }
8+
.ui-multiselect-header ul li { float:left; padding:0 10px 0 0; }
9+
.ui-multiselect-header a { text-decoration:none; }
10+
.ui-multiselect-header a:hover { text-decoration:underline; }
11+
.ui-multiselect-header span.ui-icon { float:left; }
12+
.ui-multiselect-header li.ui-multiselect-close { float:right; padding-right:0; text-align:right; }
1313

14-
.ui-multiselect-menu { display:none; padding:3px; position:absolute; z-index:10000; text-align: left }
15-
.ui-multiselect-checkboxes { position:relative /* fixes bug in IE6/7 */; overflow-y:auto }
16-
.ui-multiselect-checkboxes label { cursor:default; display:block; border:1px solid transparent; padding:3px 1px }
14+
.ui-multiselect-menu { display:none; padding:3px; position:absolute; text-align: left; }
15+
.ui-multiselect-checkboxes { overflow-y:auto; position:relative; }
16+
.ui-multiselect-checkboxes label { border:1px solid transparent; cursor:default; display:block; padding:3px 1px; }
1717
.ui-multiselect-checkboxes label input { position:relative; top:1px }
18-
.ui-multiselect-checkboxes li { clear:both; font-size:0.9em; padding-right:3px }
19-
.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label { text-align:center; font-weight:bold; border-bottom:1px solid }
20-
.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label a { display:block; padding:3px; margin:1px 0; text-decoration:none }
18+
.ui-multiselect-checkboxes li { clear:both; font-size:0.9em; padding-right:3px; }
19+
.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label { border-bottom:1px solid; font-weight:bold; text-align:center; }
20+
.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label a { display:block; margin:1px 0; padding:3px; text-decoration:none; }
2121

2222
/* remove label borders in IE6 because IE6 does not support transparency */
2323
* html .ui-multiselect-checkboxes label { border:none }
2424

2525

2626
@media print{
27-
.ui-multiselect-menu {display: none;}
28-
27+
.ui-multiselect-menu {display: none;}
2928
}
30-

src/jquery.multiselect.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,25 @@
4444
autoOpen: false,
4545
multiple: true,
4646
position: {},
47-
appendTo: "body",
47+
appendTo: null,
4848
menuWidth:null,
4949
selectedListSeparator: ', '
5050
},
5151

52+
_getAppendEl: function() {
53+
var element = this.options.appendTo;
54+
if(element) {
55+
element = element.jquery || element.nodeType ? $(element) : this.document.find(element).eq(0);
56+
}
57+
if(!element || !element[0]) {
58+
element = this.element.closest(".ui-front, dialog");
59+
}
60+
if(!element.length) {
61+
element = this.document[0].body;
62+
}
63+
return element;
64+
},
65+
5266
_create: function() {
5367
var el = this.element;
5468
var o = this.options;
@@ -75,7 +89,7 @@
7589
this.menu = $('<div />')
7690
.addClass('ui-multiselect-menu ui-widget ui-widget-content ui-corner-all')
7791
.addClass(o.classes)
78-
.appendTo($(o.appendTo));
92+
.appendTo(this._getAppendEl());
7993

8094
this.header = $('<div />')
8195
.addClass('ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix')

0 commit comments

Comments
 (0)