我正在尝试添加完美的scrollbar插件(它给出了一个漂亮的滚动条而不是浏览器默认的滚动条)到jQuery UI selectmenu
这是JSFIDDLE
当我打开selectmenu
滚动条不显示(即使我悬停列表),直到我得到鼠标接近底部的列表(这意味着:你第一次打开选择菜单它给人的感觉,没有其他项目,因为滚动条不存在)
你知道怎么解决这个问题吗?
HTML<select name="number" id="number">
<option>1</option>
<option selected="selected">2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
</select>
JS
$(function(){
$( "#number" ).selectmenu().selectmenu( "menuWidget" ).addClass( "overflow" ).perfectScrollbar();
});
CSS #number{
width: 220px;
}
.overflow{
height: 200px;
position: relative;
}
我的问题的答案是:根据我的理解,我们应用perfectscrollbar的元素应该有一个明确的高度(100%或400px等等)这没关系,我已经添加了一个类overflow它可以为列表添加高度
$( "#number" ).selectmenu().selectmenu( "menuWidget" ).addClass( "overflow" )
然后我将perfectScrollbar()
函数应用于列表但它仍然是隐藏的,这就是问题所在
jQuery不能计算一个元素的高度,如果它是隐藏(即使它有一个height css属性集)
在查看了jQuery ui selectmenu文档之后,我能够找到一个打开事件,我们可以使用它在列表打开时做一些事情
$( "#number" ).selectmenu({
open: function( event, ui ) {
$( "#number" ).selectmenu( "menuWidget" ).addClass( "overflow" ).perfectScrollbar();
}
})
代码所做的很简单,它只在列表打开并且jQuery能够读取高度
之后才应用perfectScroll()
方法。我希望这对有同样情况的人有帮助。