2014-04-15 38 views
1

我试过event.preventDefaultevent.stopPropagation,并从事件处理程序返回false。防止浏览器中按键的默认动作

没有什么可以帮助阻止浏览器中某些键的行为。

比如我想使用Page Down键的Page Up记录(下一首,上)在AngularJS应用程序,获取一个或下一个记录之间进行导航。它工作正常。但它并不妨碍浏览器在Page 012下载Page Up上执行默认操作。例如,按住select(下拉)元素的同时将改变下拉列表的选择,然后移动到下一个记录。对于很多其他有用的键无法覆盖的情况,实际上也是如此:主页结束(如果关注它,将使选择下拉更改为第一个或最后一个选择)。

这里是我当前的代码:

$document.bind('keyup', function(e) { 
    switch (e.keyCode) { 
     case 109: 
      if (e.altKey) { 
       $scope.gotoPrev(e); 
       e.preventDefault(); 
       e.stopPropagation(); 
       window.scrollTo(0, 0); 
       return false; 
      } 
      break; 
     case 107: .... 

正如你看到我目前使用其他键(Alt键+Alt键-等),而不是Page Down键Page Up。但我想用这些。

另一个相关的问题是,如何防止tab键跳转到url区域。我希望它只循环页面上的字段,而不是跳出他的页面并进入URL区域。

+0

e.stopImmediatePropagation? – steven

+0

不,这是因为默认操作在按键之前触发,在按键之前。正如在下面的答案中提出的,我将dit更改为keydown,现在我可以取消默认操作。 –

回答

1

使用“的keydown”,而不是“KEYUP”当用户释放的关键,在已经执行该键的默认操作后

keyup火灾。 (http://www.quirksmode.org/dom/events/keys.html

+0

我试过了,不起作用。建议您在jsfiddle或plunker中自己试试。 –

+0

你是对的!它工作。 –