Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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 - Fatal编程技术网

使用jquery禁用文本字段中字母的复制粘贴

使用jquery禁用文本字段中字母的复制粘贴,jquery,Jquery,在我的项目中,我有一个只接受数字值的文本字段。但是当我使用ctl+c复制字母表并使用ctl+v粘贴时,它将允许文本字段中的字母表。因此,我使用以下代码禁用复制和粘贴 $('input').bind('copy paste', function(e) { e.preventDefault(); }); 但我只想阻止字母。这意味着我想复制粘贴数值而不是字母。此函数用于jQuery。它只允许数字进入文本框 守则: jQuery.fn.filter = function() { $(this

在我的项目中,我有一个只接受数字值的文本字段。但是当我使用ctl+c复制字母表并使用ctl+v粘贴时,它将允许文本字段中的字母表。因此,我使用以下代码禁用复制和粘贴

$('input').bind('copy paste', function(e) {
 e.preventDefault();
});

但我只想阻止字母。这意味着我想复制粘贴数值而不是字母。

此函数用于jQuery。它只允许数字进入文本框 守则:

jQuery.fn.filter = function() {
    $(this).keydown(function (e) {
        if (e.shiftKey || e.ctrlKey || e.altKey) { // if shift, ctrl or alt keys held down
            e.preventDefault();         // Prevent character input
        } else {
            var n = e.keyCode;
            if (!((n == 8)              // backspace
            || (n == 46)                // delete
            || (n >= 35 && n <= 40)     // arrow keys/home/end
            || (n >= 48 && n <= 57)     // numbers on keyboard
            || (n >= 96 && n <= 105))   // number on keypad
            ) {
                e.preventDefault();     // Prevent character input
            }
        }
  $(document).mousedown(function(e){ 
    if( e.button == 2 ) { 
      e.preventDefault();         // Prevent character input
        } else {
            var n = e.keyCode;
            if (!((n == 8)              // backspace
            || (n == 46)                // delete
            || (n >= 35 && n <= 40)     // arrow keys/home/end
            || (n >= 48 && n <= 57)     // numbers on keyboard
            || (n >= 96 && n <= 105))   // number on keypad
            ) {
                e.preventDefault();    
            }
    }
    });
}
jQuery.fn.filter=function(){
$(此).keydown(函数(e){
if(e.shiftKey | | e.ctrlKey | | | e.altKey){//if按住shift、ctrl或alt键
e、 preventDefault();//防止字符输入
}否则{
var n=e.keyCode;
if(!((n==8)//退格
||(n==46)//删除

||(n>=35&&n=48&&n=96&&n=35&&n=48&&n=96&&n我为您的问题提供了一个有趣的解决方法。对于
粘贴事件,您可以使用以下代码:

$("input").on("paste", function(e) {
    var that = this;
    that.style.color = "#fff";      // field background color
    setTimeout(function() {
        that.value = that.value.replace(/\D/g, "");
        that.style.color = "#000";  // normal field font color
    }, 100);
});​

演示:

试试这个功能。这可能不是你想要的,但你可以从中做点什么。我之前已经做过,并在我的博客上发布过

JS:

 $(function(){  
                $(".numericOnly").bind('keypress',function(e){  
                          if(e.keyCode == '9' || e.keyCode == '16'){  
                                return;  
                           }  
                           var code;  
                           if (e.keyCode) code = e.keyCode;  
                           else if (e.which) code = e.which;   
                           if(e.which == 46)  
                                return false;  
                           if (code == 8 || code == 46)  
                                return true;  
                           if (code < 48 || code > 57)  
                                return false;  
                     }  
                );  
                $(".numericOnly").bind("paste",function(e) {  
                     e.preventDefault();  
                });  
                $(".numericOnly").bind('mouseenter',function(e){  
                      var val = $(this).val();  
                      if (val!='0'){  
                           val=val.replace(/[^0-9]+/g, "")  
                           $(this).val(val);  
                      }  
                });  
           });  
 <body>  
       <input type="text" id="textBox" class="numericOnly" />  
 </body>  
$(函数(){
$(“.numericOnly”).bind('keypress',函数(e){
如果(e.keyCode=='9'| | e.keyCode=='16'){
返回;
}  
var代码;
如果(e.keyCode)代码=e.keyCode;
否则,如果(e.which)代码=e.which;
如果(e.which==46)
返回false;
如果(代码==8 | |代码==46)
返回true;
如果(代码<48 | |代码>57)
返回false;
}  
);  
$(“.numericOnly”).bind(“粘贴”,函数(e){
e、 预防默认值();
});  
$(“.numericOnly”).bind('mouseenter',函数(e){
var val=$(this.val();
如果(val!='0'){
val=val.replace(/[^0-9]+/g,”)
$(this).val(val);
}  
});  
});  
HTML:

 $(function(){  
                $(".numericOnly").bind('keypress',function(e){  
                          if(e.keyCode == '9' || e.keyCode == '16'){  
                                return;  
                           }  
                           var code;  
                           if (e.keyCode) code = e.keyCode;  
                           else if (e.which) code = e.which;   
                           if(e.which == 46)  
                                return false;  
                           if (code == 8 || code == 46)  
                                return true;  
                           if (code < 48 || code > 57)  
                                return false;  
                     }  
                );  
                $(".numericOnly").bind("paste",function(e) {  
                     e.preventDefault();  
                });  
                $(".numericOnly").bind('mouseenter',function(e){  
                      var val = $(this).val();  
                      if (val!='0'){  
                           val=val.replace(/[^0-9]+/g, "")  
                           $(this).val(val);  
                      }  
                });  
           });  
 <body>  
       <input type="text" id="textBox" class="numericOnly" />  
 </body>  

这将允许您只输入数值。您甚至不能复制粘贴和拖放


查看事件对象并稍微“duckduckgoing”后:

我不知道这是如何跨浏览器的,但如果向后兼容性是没有问题的话,请继续使用它

查看

注:我正在mac os 10.6上使用谷歌chrome 22版


编辑:firefox 13没有clipboardData对象,ie 10也没有,safari 5.1.2支持它(因此它是一个webkit功能)。

jaychapani提供的解决方案几乎可以解决该用户的特定问题。但是,它阻止粘贴任何东西,甚至数字

我稍微修改了代码,现在Javascript(a)允许用户粘贴数字,但(b)不允许字母和特殊字符。我从上面的jaychapani示例中删除了以下内容:

            $(".numericOnly").bind("paste",function(e) {  
                 e.preventDefault();  
            });  
最后的准则是:

            $(function(){  
            $(".numericOnly").bind('keypress',function(e){  
                      if(e.keyCode == '9' || e.keyCode == '16'){  
                            return;  
                       }  
                       var code;  
                       if (e.keyCode) code = e.keyCode;  
                       else if (e.which) code = e.which;   
                       if(e.which == 46)  
                            return false;  
                       if (code == 8 || code == 46)  
                            return true;  
                       if (code < 48 || code > 57)  
                            return false;  
                 }  
            );  

            $(".numericOnly").bind('mouseenter',function(e){  
                  var val = $(this).val();  
                  if (val!='0'){  
                       val=val.replace(/[^0-9]+/g, "")  
                       $(this).val(val);  
                  }  
            });  
       });  
$(函数(){
$(“.numericOnly”).bind('keypress',函数(e){
如果(e.keyCode=='9'| | e.keyCode=='16'){
返回;
}  
var代码;
如果(e.keyCode)代码=e.keyCode;
否则,如果(e.which)代码=e.which;
如果(e.which==46)
返回false;
如果(代码==8 | |代码==46)
返回true;
如果(代码<48 | |代码>57)
返回false;
}  
);  
$(“.numericOnly”).bind('mouseenter',函数(e){
var val=$(this.val();
如果(val!='0'){
val=val.replace(/[^0-9]+/g,”)
$(this).val(val);
}  
});  
});  
这是有效的,当使用Ctl+v或从菜单粘贴时,将拒绝字母和特殊字符。但是,我注意到,有时在用户粘贴不需要的字符后,表单拒绝它们之前会有延迟

通常,拒绝不需要的字符只需一两秒钟。但也有少数情况下,文本清除前等待大约10秒。我猜这可能是因为(a)我正在刷新以观察行为,一些奇怪的缓存行为导致Javascript快速工作的延迟,或者(b)Javascript出现一些循环问题,或者(c)两者的某种组合

不过,在大多数生产环境中,这都可以。我怀疑用户在提交之前是否会反复刷新页面


不过,我想知道是否有更为理想的解决方案。我们欢迎您提出改进建议。

我已经更新了jaychapani的答案。 这里我添加了对箭头键的支持。并防止按下
%
&
键)

    $("input").bind('keypress', function (e) {
    if (e.keyCode == '9' || e.keyCode == '16') {
        return;
    }
    var code;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
    if (e.which == 46)
        return false;
    if (e.which == 33 || e.which == 64 || e.which == 35 || e.which == 36 || e.which == 37 || e.which == 94 || e.which == 38 || e.which == 42 || e.which == 40 || e.which == 41)
        return false;
    if (code == 8 || code == 46)
        return true;
    if (code == 37 || code == 38 || code == 39 || code == 40)
        return true;
    if (code < 48 || code > 57)
        return false;
});


$("input").bind("paste", function (e) {
    e.preventDefault();
});
$("input").bind('mouseenter', function (e) {
    var val = $(this).val();
    if (val != '0') {
        val = val.replace(/[^0-9]+/g, "")
        $(this).val(val);
    }
});
$(“输入”).bind('keypress',函数(e){
如果(e.keyCode=='9'| | e.keyCode=='16'){
返回;
}
var代码;
如果(e.keyCode)代码=e.keyCode;
否则,如果(e.which)代码=e.which;
如果(e.which==46)
返回false;
如果(e.which==33 | e.which==64 | e.which==35 | e.which==36 | e.which==37 | e.which==94 | e.which==38 | e.which==42 | e.which==40 | e.w