Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅允许数字和ctrl+;a,ctrl+;v,ctrl+;c到文本框_Javascript_Jquery_Regex_Keycode - Fatal编程技术网

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("")
    }
})