Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Jquery 仅在粘贴时将输入限制为数字_Jquery_Restriction - Fatal编程技术网

Jquery 仅在粘贴时将输入限制为数字

Jquery 仅在粘贴时将输入限制为数字,jquery,restriction,Jquery,Restriction,我有一个名为restrict numbers的类的输入文件,我想限制输入的字符只接受数字,我使用了以下代码,这很好,但我想在不完全禁用粘贴的情况下在输入文件中粘贴相同的限制: function input_only_numbers(){ $("input[type=text]").each(function(){ if( $(this).hasClass("restrict-numbers") ){ $(this).keydown(function(event) { if

我有一个名为restrict numbers的类的输入文件,我想限制输入的字符只接受数字,我使用了以下代码,这很好,但我想在不完全禁用粘贴的情况下在输入文件中粘贴相同的限制:

function input_only_numbers(){
$("input[type=text]").each(function(){
if( $(this).hasClass("restrict-numbers") ){    
    $(this).keydown(function(event) {
    if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || 

        // Allow: Ctrl+A
    (event.keyCode == 65 && event.ctrlKey === true) ||

        // Allow: Ctrl+V
    (event.ctrlKey == true && (event.which == '118' || event.which == '86')) ||

        // Allow: Ctrl+c
    (event.ctrlKey == true && (event.which == '99' || event.which == '67')) ||

        // Allow: Ctrl+x
    (event.ctrlKey == true && (event.which == '120' || event.which == '88')) ||

        // Allow: home, end, left, right
    (event.keyCode >= 35 && event.keyCode <= 39)) {
    // let it happen, don't do anything
        return;
    }
    else {
    // Ensure that it is a number and stop the keypress
        if ( event.shiftKey|| (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 ) ){
        event.preventDefault(); 
        }
    }
    });
}




});
函数输入\u仅\u编号(){
$(“输入[type=text]”)。每个(函数(){
if($(this).hasClass(“限制数字”){
$(此).keydown(函数(事件){
如果(event.keyCode==46 | | event.keyCode==8 | | event.keyCode==9 | | event.keyCode==27 |
//允许:Ctrl+A
(event.keyCode==65&&event.ctrlKey==true)||
//允许:Ctrl+V
(event.ctrlKey==true&&(event.which=='118'| | event.which=='86'))||
//允许:Ctrl+c
(event.ctrlKey==true&&(event.which=='99'| | event.which=='67'))||
//允许:Ctrl+x
(event.ctrlKey==true&&(event.which=='120'| | event.which=='88'))||
//允许:起始、结束、左、右

(event.keyCode>=35&&event.keyCode如果您不控制用户按下的实际键,而是控制输入字段的内容,您可能会减少工作?您仍然可以使用keyup事件,但是,您应该查看输入字段的当前内容,而不是检查keyCode(
$(this).val()
)对其应用适当的正则表达式

这样,用户可以以任何首选方式工作,但您仍然可以完全控制允许的内容,而不会使其对您自己来说过于复杂

编辑(回复评论):

Optimus Prime已经提供了一些非常有用的代码,我的版本应该是这样的

$( "input[type=text]" ).on("keyup", function() {
  var o,v=(o=$(this)).val();
  o.val(v.replace(/[^\d]/g,""));
});
正则表达式在某种程度上仍然很粗糙。请随意在这里改进它:(或此版本:)。

使用插件实现表单

此外,这也适用于文本区域

或者最好在用户尝试提交时更改输入

$('form').submit(function () {
    if ($('#numeric').value != $('#numeric').value.replace(/[^0-9\.]/g, '')) {
       $('#numeric').value = $('#numeric').value.replace(/[^0-9\.]/g, '');
    }
});
这就是你正在做的,你想删除字符,而不是数字,那么为什么要做这么多的努力,只是在最后删除它们

这是我最喜欢的选择

尝试HTML5输入:


实现表单的其他插件是

$(文档).ready(函数()
{
$(“#测试”).keydown(函数(事件){
//允许:退格、删除、制表符、转义和回车
如果(event.keyCode==46 | | event.keyCode==8 | | event.keyCode==9 | | event.keyCode==27 | | event.keyCode==13 |
//允许:Ctrl+V
(event.ctrlKey==true&&(event.which='118'| | event.which==''86'))|
//允许:Ctrl+c
(event.ctrlKey==true&&(event.which='99'| | event.which==''67'))|
//允许:Ctrl+A
(event.keyCode==65&&event.ctrlKey==true)|
//允许:起始、结束、左、右

(event.keyCode>=35&&event.keyCode此代码用于javascript,并在我的angular应用程序中使用

jQuery('#Id').on('paste keyup', function(e){
    jQuery(this).val(document.getElementById('Id').value.replace(/[^\d]/g, ''));
  });

其中Id是输入字段Id,它是阻止输入并粘贴到字段中的字母表。

实际上它必须与jquery类似

$('.just_numbers')。在('paste keyup',函数(e)上{
$(this.val($(this.val().replace(/[^\d]/g',);
});


同时粘贴,按下也忽略除数字以外的内容。

您可以使用jQuery表单验证插件来执行此类任务。您可以提供一个可能重复的示例吗?谢谢,我使用了我搜索的插件,因为链接不起作用:DPerfect jQuery代码。对我来说很好。为什么使用from settimeout??
<input type="number" value="0" min="0"> 
$( "#input" ).on("paste", function() {
    if ($('"#input').val() != $('"#input').val().replace(/[^\d\.]/g,"")) 
    { $('"#input').val($('"#input').val().replace(/[^\d\.]/g,""));
    }
});
jQuery(function($) {
      $('#someID_defaults').autoNumeric('init');    
  });
$(document).ready(function() 
{
    $("#test").keydown(function(event) {
        // Allow: backspace, delete, tab, escape, and enter
        if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || 
                // Allow: Ctrl+V
                (event.ctrlKey == true && (event.which == '118' || event.which == '86')) ||  
                // Allow: Ctrl+c
                (event.ctrlKey == true && (event.which == '99' || event.which == '67')) || 
                // Allow: Ctrl+A
            (event.keyCode == 65 && event.ctrlKey === true) || 
             // Allow: home, end, left, right
            (event.keyCode >= 35 && event.keyCode <= 39)) {
                 // let it happen, don't do anything
                 return;
        }
        else {
            // Ensure that it is a number and stop the keypress
            if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
                event.preventDefault(); 
            }   
        }
    });
});
$(".numbersOnly").bind('paste', function(e) {
        var self = this;
        setTimeout(function(e) {
            var val = $(self).val();
            if (val != '0') {
                var regx = new RegExp(/^[0-9]+$/);
                if (!regx.test(val)) {
                    $(".numbersOnly").val("");
                }
                $(this).val(val);
            }
        }, 0);
    });
jQuery('#Id').on('paste keyup', function(e){
    jQuery(this).val(document.getElementById('Id').value.replace(/[^\d]/g, ''));
  });