防止退格键在 AngularJS 中导航回来
Prevent backspace from navigating back in AngularJS
我在 AngularJS 网络应用程序中遇到了这个问题。
当用户进入要填写表单的页面并开始打字时,如果他按下退格键并且焦点不在输入文本上,则页面会转到之前的状态。
我使用 jQuery 查找了 this solution,但在 AngularJS.
中似乎不是实现此目的的合适方法
我在这里得到了这个答案:
How can I disabling backspace key press on all browsers?
$(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();
}
}
});
只需将它放入您的控制器即可。
angular中有$document
js:
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 Demo.
你可以在演示中看到我只使用了 "INPUT"
nodeName 并且它不会阻止默认的退格键在文本输入上但不会在 textarea
上因为我们没有处理它在这种情况下。
我无法评论 "accepted answer",但它不会正常工作,因为条件
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();
}
}
});
});
我在 AngularJS 网络应用程序中遇到了这个问题。
当用户进入要填写表单的页面并开始打字时,如果他按下退格键并且焦点不在输入文本上,则页面会转到之前的状态。
我使用 jQuery 查找了 this solution,但在 AngularJS.
中似乎不是实现此目的的合适方法我在这里得到了这个答案: How can I disabling backspace key press on all browsers?
$(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();
}
}
});
只需将它放入您的控制器即可。
angular中有$document
js:
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 Demo.
你可以在演示中看到我只使用了 "INPUT"
nodeName 并且它不会阻止默认的退格键在文本输入上但不会在 textarea
上因为我们没有处理它在这种情况下。
我无法评论 "accepted answer",但它不会正常工作,因为条件
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();
}
}
});
});