将箭头键重置为默认行为
Reset arrow keys to default behaviour
我注意到我的箭头键被Bing地图劫持了,不再滚动页面。
无论如何,通过JavaScript将箭头键重置为默认行为?
最后我找到了可以使用的bing的keydown事件。因此,当用户的光标在bing地图内(不会占据整个页面)时,用户仍然可以放大和缩小/点击拖动来平移。然而,当他们通常在站点的箭头键上按下时,这不应该影响bing地图。
在初始化新的Microsoft.Maps后,我发现我可以添加一个处理程序来取消地图的keydown事件:
Microsoft.Maps.Events.addHandler(map, 'keydown', cancelEvent)
对于Firefox使用document.activeElement.blur(),对于IE使用window.focus(),而对于Webkit使用document.activElement=document来重新获取焦点:
<!doctype html>
<html lang="en">
<head>
<title>Blur Object Test</title>
</head>
<body>
<object id="bingmap" data="http://www.bing.com/maps"></object>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<script type="text/javascript">
document.activeElement.blur(); window.focus(); document.activeElement = document;
</script>
</body>
</html>
如果Webkit不一致,请使用鼠标悬停事件:
function takeback()
{
while(RegExp("object","i").test(document.activeElement.nodeName) )
{
window.focus();
document.activeElement.blur();
}
return false;
}
if (!!document.addEventListener)
{
document.addEventListener("mouseover", takeback, false);
}
else
{
window.focus();
}
如果您想完全阻止映射与键盘事件交互,我认为最好的解决方案是在初始化映射时使用"disableKeyboardInput"属性。
// Initialize the map
map = new Microsoft.Maps.Map(document.getElementById("myMap"), {
credentials:"Bing Maps Key",
disableKeyboardInput: true
});
发件人:http://social.msdn.microsoft.com/Forums/en-US/2807cbc3-0f88-4415-b2a9-09e950d210f7/issue-with-bing-maps-while-pressing-the-down-or-up-arrow
要在不破坏其他JavaScript(即删除keybinds但保留其他页面功能)的情况下停止此行为,您需要破坏影响keybinds的特定JavaScript调用(并且只破坏它们)。
最简单的方法是使用GreaseMonkey和像这样的预先制作的脚本:禁用网站键盘挂钩
- 用嵌套函数和默认函数定义函数
- 如何使用铁流星与流星的默认路线
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- CKeditor:更改对话框中的默认选择选项
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何从外部页面激活非默认引导选项卡
- 防止默认锚点行为AngularJS
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- jpm的默认Firefox路径没有'不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 如果值为空,如何设置输入的默认值?jQuery
- 骨干模型默认值-todos.js示例中不必要的代码
- jquery日期选择器年份范围默认值
- jQuery:当屏幕大小改变时,如何更改默认图像和悬停图像
- Highcharts-如何在自定义格式化程序中获得默认的y轴标签格式化程序
- 默认情况下折叠和展开嵌套列表
- 使用AngularJS中的UI路由器将状态重定向到默认子状态
- 使用JavaScript从超链接加载时的默认下拉值
- 如何设置默认<ui视图>在另一<ui视图>
- 一键提交(阻止默认)多个表单