我对 twitter-bootstrap 和 firefox 有一些问题。我有一个按钮和一个带有输入文本的下拉菜单。如果我右键单击输入(例如右键单击 + 粘贴),Firefox 会关闭下拉菜单。这很无聊。
有什么解决方案可以防止这种行为吗?
谢谢 !
我对 twitter-bootstrap 和 firefox 有一些问题。我有一个按钮和一个带有输入文本的下拉菜单。如果我右键单击输入(例如右键单击 + 粘贴),Firefox 会关闭下拉菜单。这很无聊。
有什么解决方案可以防止这种行为吗?
谢谢 !
作为一种直接的权宜之计,您可以使用以下几行来防止单击事件在单击事件是右键单击时传播
$(document).on('click', function(e) {
e.button === 2 && e.stopImmediatePropagation()
})
这需要放在jQuery加载和Bootstrap加载之间。
然而,这是一种相当生硬的方法,如果可能的话,你最好做一些更微妙的事情。
以更有针对性的方式规避此问题的一种方法是禁用原始事件侦听器并将其替换为首先检查右键单击的事件侦听器。
// obtain a reference to the original handler
var _clearMenus = $._data(document, "events").click.filter(function (el) {
return el.namespace === 'data-api.dropdown' && el.selector === undefined
})[0].handler;
// disable the old listener
$(document)
.off('click.data-api.dropdown', _clearMenus)
.on('click.data-api.dropdown', function (e) {
// call the handler only when not right-click
e.button === 2 || _clearMenus()
})
与前面的示例不同,此代码需要在Bootstrap 加载后运行。
对于Bootstrap 3,您必须将命名空间更新为bs.data-api.dropdown
.
// obtain a reference to the original handler
var _clearMenus = $._data(document, "events").click.filter(function (el) {
return el.namespace === 'bs.data-api.dropdown' && el.selector === undefined
})[0].handler;
// disable the old listener
$(document)
.off('click.data-api.dropdown', _clearMenus)
.on('click.data-api.dropdown', function (e) {
// call the handler only when not right-click
e.button === 2 || _clearMenus()
})