阻止单击滚动条触发.blur
Prevent clicking scrollbar from triggering .blur
我为我正在开发的一个web应用程序编写了一个自定义下拉列表,我想用它完成一组特定的功能。首先,如果你把鼠标从菜单上移开,我希望下拉列表保持打开状态。我希望它在您重新单击下拉标题、单击下拉列表中的某个元素或单击页面上的其他任何位置时关闭。如果元素太多,我还需要在下拉项列表中启用滚动条。我们使用的是标准分辨率,所以我使用最大高度属性来实现这一点。我保持菜单打开的方法是在.bulr()事件上使菜单按钮聚焦并关闭菜单项。问题是当用户单击滚动条并关闭菜单时,.blur()会触发。我在这里创建了一个菜单示例:http://codepen.io/jiggawagga/pen/wmkEG我发现一件奇怪的事情是,在我正在开发的应用程序中的谷歌Chrome中,你可以点击滚动条,菜单保持打开状态,但在Internet Explorer中却没有。另一件奇怪的事情是Codepen.io中的例子与该应用程序的代码完全相同,但它在Chrome中无法保持打开状态。(我真的不在乎其他浏览器,这是一个内部应用程序,由于公司标准,我们只针对IE 8(bleh)和Chrome)下面是我用来处理菜单的Javascript和HTML。(同样,完整的代码和工作示例位于上面的codepen.io链接)
<div id="container">
<div id="group-dropdown">
<a href="#" id="group-dropdown-title">
GROUP NAME <span id="group-dropdown-indicator-arrow" class="arrow arrow-down"></span>
</a>
<div id="group-dropdown-item-container">
<div class="group-dropdown-item" data-bind="1234567">
<a href="#">
<span class="group-dropdwon-item-name">GROUP 2 NAME</span>
<br />
<span style="color: #daa520;">INPROGRESS</span>
<span style="color: #0065a4;"><b style="color: black;">Group Number:</b> 1651651</span>
<span style="color: #0065a4;"><b style="color: black;">BCBS Number:</b> 61565</span>
</a>
</div>
<div class="group-dropdown-item" data-bind="1651651">
<span class="group-dropdwon-item-name">GROUP 3 NAME</span>
<br />
<span style="color: green;">ACTIVE</span>
<span style="color: #0065a4;"><b style="color: black;">Group Number:</b> 1651651</span>
<span style="color: #0065a4;"><b style="color: black;">BCBS Number:</b> 61565</span>
</div>
<div class="group-dropdown-item" data-bind="1651651">
<span class="group-dropdwon-item-name">GROUP 3 NAME</span>
<br />
<span style="color: green;">ACTIVE</span>
<span style="color: #0065a4;"><b style="color: black;">Group Number:</b> 1651651</span>
<span style="color: #0065a4;"><b style="color: black;">BCBS Number:</b> 61565</span>
</div>
<div class="group-dropdown-item" data-bind="1651651">
<span class="group-dropdwon-item-name">GROUP 3 NAME</span>
<br />
<span style="color: green;">ACTIVE</span>
<span style="color: #0065a4;"><b style="color: black;">Group Number:</b> 1651651</span>
<span style="color: #0065a4;"><b style="color: black;">BCBS Number:</b> 61565</span>
</div>
<div class="group-dropdown-item" data-bind="1651651">
<span class="group-dropdwon-item-name">GROUP 3 NAME</span>
<br />
<span style="color: green;">ACTIVE</span>
<span style="color: #0065a4;"><b style="color: black;">Group Number:</b> 1651651</span>
<span style="color: #0065a4;"><b style="color: black;">BCBS Number:</b> 61565</span>
</div>
<div class="group-dropdown-item" data-bind="1651651">
<span class="group-dropdwon-item-name">GROUP 3 NAME</span>
<br />
<span style="color: red;">TERMINATED</span>
<span style="color: #0065a4;"><b style="color: black;">Group Number:</b> 1651651</span>
<span style="color: #0065a4;"><b style="color: black;">BCBS Number:</b> 61565</span>
</div>
</div>
</div>
</div>
var _menuOpen = false;
$('#group-dropdown-title').click(function () {
if (_menuOpen) {
$('#group-dropdown-title').blur();
$('#group-dropdown-title').removeClass('hovered');
$('#group-dropdown-item-container').hide();
flipArrow('down');
_menuOpen = false;
}
else {
$('#group-dropdown-title').focus();
$('#group-dropdown-title').addClass('hovered');
$('#group-dropdown-item-container').show();
flipArrow('up');
_menuOpen = true;
}
});
$('#group-dropdown-title').blur(function (e) {
$('#group-dropdown-title').removeClass('hovered');
$('#group-dropdown-item-container').hide();
flipArrow('down');
_menuOpen = false;
});
function flipArrow(direction) {
if (direction.toLowerCase() === 'up') {
$('#group-dropdown-indicator-arrow').removeClass('arrow-down');
$('#group-dropdown-indicator-arrow').addClass('arrow-up');
} else if (direction.toLowerCase() === 'down') {
$('#group-dropdown-indicator-arrow').removeClass('arrow-up');
$('#group-dropdown-indicator-arrow').addClass('arrow-down');
}
}
与其执行.blur()
事件,我建议在.group-dropdown-item
上执行.click()
事件,如下所示:
$('.group-dropdown-item').click(function (e) {
$('#group-dropdown-title').removeClass('hovered');
$('#group-dropdown-item-container').hide();
flipArrow('down');
_menuOpen = false;
});
更新:
$('#group-dropdown-title').click(function () {
if (_menuOpen) {
$('#group-dropdown-item-container').blur();
flipArrow('down');
_menuOpen = false;
} else {
$('#container').addClass('clickClose');
$('#group-dropdown-title').addClass('hovered');
$('#group-dropdown-item-container').show();
$('#group-dropdown-item-container').focus();
flipArrow('up');
_menuOpen = true;
}
});
$('.group-dropdown-item').click(function (e) {
$('#group-dropdown-item-container').blur();
//add menu item action here
flipArrow('down');
_menuOpen = false;
});
$('#group-dropdown-item-container').blur(function (e) {
if (_menuOpen) {
$('#container').removeClass('clickClose');
$('#group-dropdown-title').removeClass('hovered');
$('#group-dropdown-item-container').hide();
flipArrow('down');
_menuOpen = false;
}
});
$('html, body, #container, #group-dropdown').click(function (e) {
if (_menuOpen) {
$('#group-dropdown-item-container').blur();
}
}).children().click(function (e) {
return false;
});
CodePen
相关文章:
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 禁用(而不是隐藏)浏览器滚动条
- 在firefox和chrome中的左侧显示iframe滚动条
- jquery:将动画绑定到滚动条位置的更好方法
- 在窗口中添加滚动条
- 如何查明鼠标按下事件是否发生在滚动条上或元素中的其他任何位置
- 使用没有插件的javascript自定义滚动条
- CodeMirror.禁用垂直滚动条
- 在滚动时,在隐藏滚动条和隐藏溢出的同时触发事件
- 可以'无法使滚动条正常工作
- 强制滚动条覆盖页面内容
- 如何隐藏滚动条,但希望它继续工作
- 滚动所有嵌套的滚动条,使HTML元素进入视图
- 使用浏览器滚动条而不是iframe滚动条
- 滚动条在关闭引导对话框后消失
- javascript/获取滚动条位置的回调
- 可调整滚动条大小
- 去掉滚动条
- ext-js网格面板滚动条不适用于jquery
- 阻止单击滚动条触发.blur