防止退格在AngularJS中导航回来

我在AngularJS webapp中遇到了这个问题。

当用户输入带有要填写的表单的页面并且他开始键入时,如果他按下退格键并且焦点不在输入文本上,则页面将进入先前状态。

我使用jQuery查找了这个解决方案 ,但它似乎不适合在AngularJS中实现这一点。

角js中有$document

 angular.module('yourModule', []) .controller('yourController', ['$scope', '$document', function($scope, $document) { $document.on('keydown', function(e){ if(e.which === 8 && ( e.target.nodeName !== "INPUT" && e.target.nodeName !== "SELECT" ) ){ // you can add others here inside brackets. e.preventDefault(); } }); } ]); 

Plnkr演示。

您可以在演示中看到我仅使用"INPUT" nodeName,它不会阻止文本输入上的退格键的默认值,但不会阻止textarea上的退格键,因为我们在条件中没有处理它。

我无法评论“接受的答案”,但它的工作方式不正确

 e.which === 8 && e.target.nodeName !== "INPUT" || e.target.nodeName !== "SELECT" 

有逻辑错误,所以你可以使用

 e.which === 8 && e.target.nodeName !== "INPUT" && e.target.nodeName !== "SELECT" 

或回答编写@ThisIsMarkSantiago。

在控制器中添加以下脚本

 var rx = /INPUT|SELECT|TEXTAREA/i; $document.on("keydown keypress", function(e){ if( e.which == 8 ){ // 8 == backspace if(!rx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){ e.preventDefault(); } } }); 

或者你可以使用Jquery

  $(function(){ var regx = /INPUT|SELECT|TEXTAREA/i; $(document).bind("keydown keypress", function(e){ if( e.which == 8 ){ // 8 == backspace if(!regx.test(e.target.tagName) || e.target.disabled || e.target.readOnly ){ e.preventDefault(); } } }); }); 

我在这里得到了这个答案: 如何在所有浏览器上禁用退格键按键?

 $(document).keydown(function(e) { var nodeName = e.target.nodeName.toLowerCase(); if (e.which === 8) { if ((nodeName === 'input' && e.target.type === 'text') || nodeName === 'textarea') { // do nothing } else { e.preventDefault(); } } }); 

把它放在你的控制器里面吧。