Javascript 仅允许数字和ctrl+;a,ctrl+;v,ctrl+;c到文本框
Javascript 仅允许数字和ctrl+;a,ctrl+;v,ctrl+;c到文本框,javascript,jquery,regex,keycode,Javascript,Jquery,Regex,Keycode,我试图允许用户只输入数字,并将控件复制粘贴到文本框中。我可以限制用户只输入数字,但复制、粘贴对我无效。请帮助我解决此问题。 这是我的脚本: $(".allow_only_numbers").keydown(function (e) { var ctrlDown = false; var ctrlKey = 17, vKey = 86, cKey = 67; if (e.keyCode === ctrlKey){ ctrlDown = true; }
我试图允许用户只输入数字,并将控件复制粘贴到文本框中。我可以限制用户只输入数字,但复制、粘贴对我无效。请帮助我解决此问题。
这是我的脚本:
$(".allow_only_numbers").keydown(function (e) {
var ctrlDown = false;
var ctrlKey = 17, vKey = 86, cKey = 67;
if (e.keyCode === ctrlKey){
ctrlDown = true;
}
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||
// Allow: Ctrl
(e.keyCode === ctrlKey) ||
// Allow: Ctrl+A
(e.keyCode === 65 && e.ctrlKey === true) ||
// Allow: Ctrl+v
(e.keyCode === vKey && ctrlDown) ||
// Allow: Ctrl+c
(e.keyCode === cKey && ctrlDown) ||
// Allow: home, end, left, right, down, up
(e.keyCode >= 35 && e.keyCode <= 40)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
});
$(“.allow_only_number”).keydown(函数(e){
var ctrlDown=false;
var ctrlKey=17,vKey=86,cKey=67;
如果(例如keyCode===ctrlKey){
ctrlDown=true;
}
//允许:退格、删除、制表符、转义、输入和。
if($.inArray(例如,keyCode,[46,8,9,27,13,110])!=-1||
//允许:Ctrl
(e.keyCode===ctrlKey)||
//允许:Ctrl+A
(e.keyCode==65&&e.ctrlKey==true)||
//允许:Ctrl+v
(e.keyCode===vKey&ctrlDown)||
//允许:Ctrl+c
(e.keyCode===cKey和ctrlDown)||
//允许:起始、结束、左、右、下、上
(e.keyCode>=35&&e.keyCode如果您将keydown
事件更改为keydup
事件,您可以使用e.ctrlKey
,当按下ctrl
键时,这将是真的
。尝试这样做
$(文档).ready(函数(){
$(“.allow_only_number”).keydown(函数(e){
//允许:退格、删除、制表符、转义、输入和。
如果($.inArray(例如,keyCode[46,8,9,27,13,110,190])!=-1||
//允许:Ctrl+A、Ctrl+C、Ctrl+V、Command+A
((e.keyCode==65 | | e.keyCode==86 | | e.keyCode==67)和&(e.ctrlKey==true | | e.metaKey==true))||
//允许:起始、结束、左、右、下、上
(e.keyCode>=35&&e.keyCode仅功能编号(evt){
evt=(evt)?evt:window.event;
var charCode=(evt.which)?evt.which:evt.keyCode;
如果(字符码>31&(字符码<48 | |字符码>57)){
返回false;
}
返回true;
}
$(“.allow_only_number”).keydown(函数(e){
var isModifierkeyPressed=(e.metaKey | | e.ctrlKey | | e.shiftKey);
var iscursormoveordeletAction=([46,8,37,38,39,40]),indexOf(e.keyCode)!=-1;
var isNumKeyPressed=(e.keyCode>=48&&e.keyCode=96&&e.keyCode这应该会给你一个想法。对不起,我在Mac上,据我所知,e.ctrlKey和类似的东西在Mac上不起作用
var-mod;
var-output=jQuery(“#output”);
var numeric=jQuery(“#numeric”).keydown(函数(e){
mod=e.which;
如果(!(e.which>=48&&e.which
$(“.allow_only_number”)。打开(“输入”,函数(e){
e、 target.value=e.target.value.replace(/[^0-9]/g',)
});
来自@Shanimal answer。
这是我的angular js指令。只在输入中使用数字
.directive('onlyNumber', function() {
return {
restrict: 'A',
link: function (scope, elm, attrs, ctrl) {
elm.on("propertychange input",function (event) {
event.target.value = event.target.value.replace(/[^0-9]/g,'');
});
}
};
})
只需对元素使用“唯一数字”。
例如:
<input type="text" data-ng-model="number" placeholder="number"id="cifNumber" only-number/>
$('.numericOnly')。打开('keydown-keyup',函数(e){
//允许:退格、删除、制表符、转义、输入和。
如果($.inArray(例如,keyCode[46,8,9,27,13,110,190])!=-1||
//允许:Ctrl+A、Ctrl+C、Ctrl+V、Command+A
((e.keyCode==65 | | e.keyCode==86 | | e.keyCode==67)和&(e.ctrlKey==true | | e.metaKey==true))||
//允许:起始、结束、左、右、下、上
(e.keyCode>=35&&e.keyCode能否将类型设置为数字?
?@Pekka我可以限制用户只输入数字,但复制、粘贴对我不起作用。对于现代浏览器,可以使用input
事件进行粘贴和按键事件。IE9提供部分支持,IE8提供部分支持none@SureshPattu你试过我的答案吗?@JohnR-Yes-man我试用效果很好,非常感谢:)很好的解决方案,读起来比John R.的答案更清晰,尽管它本质上是一样的。干净的解决方案不需要将一堆键码和ctrl键组合列为白名单。谢谢。我不准备用IE8验证,但有一个SO答案说你可以在('propertychange input')上使用
而不仅仅是('input')上的
我迄今为止找到的最佳解决方案!+1感谢您的提醒。
.directive('onlyNumber', function() {
return {
restrict: 'A',
link: function (scope, elm, attrs, ctrl) {
elm.on("propertychange input",function (event) {
event.target.value = event.target.value.replace(/[^0-9]/g,'');
});
}
};
})
<input type="text" data-ng-model="number" placeholder="number"id="cifNumber" only-number/>
$('.numericOnly').on('keydown keyup', function (e) {
// Allow: backspace, delete, tab, escape, enter and .
if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
// Allow: Ctrl+A,Ctrl+C,Ctrl+V, Command+A
((e.keyCode == 65 || e.keyCode == 86 || e.keyCode == 67) && (e.ctrlKey === true || e.metaKey === true)) ||
// Allow: home, end, left, right, down, up
(e.keyCode >= 35 && e.keyCode <= 40)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
//Ensure that bulk number pasted is numeric only
let n = $(this).val()
if (!isNaN(parseFloat(n)) && isFinite(n)) {
} else {
$(this).val("")
}
})