在我的项目中,我只有数字值的文本字段。但是当我使用ctl + c复制字母并使用ctl + v粘贴时,它将允许文本中的字母所以我使用下面的代码禁用了复制和粘贴。使用jquery禁用文本字段中的字母复制
$('input').bind('copy paste', function(e) {
e.preventDefault();
});
但我只想防止字母。这意味着我想复制粘贴数字值不是字母。
在我的项目中,我只有数字值的文本字段。但是当我使用ctl + c复制字母并使用ctl + v粘贴时,它将允许文本中的字母所以我使用下面的代码禁用了复制和粘贴。使用jquery禁用文本字段中的字母复制
$('input').bind('copy paste', function(e) {
e.preventDefault();
});
但我只想防止字母。这意味着我想复制粘贴数字值不是字母。
试试这个功能。这可能不是你正在寻找的东西,但你可以做一些事情。我之前做过这些,并发布在我的博客上。
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);
}
});
});
HTML:
<body>
<input type="text" id="textBox" class="numericOnly" />
</body>
这将允许你只输入唯一的数值。你甚至不能复制粘贴和拖放。
这个函数是针对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();
}
}
});
}
林新台币确定自己正确的需要,但尝试。如果它的nt wat你想要的话。
我对你的问题有一个有趣的解决方法。对于paste
事件你可以使用下面的代码:
$("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);
});
查看事件对象和 “duckduckgoing” 了一下后:
$('input').on('paste', function (event) {
if (event.originalEvent.clipboardData.getData('Text').match(/[^\d]/)) {
event.preventDefault();
}
});
我有不知道如何跨浏览器,这是但如果向后兼容性不成问题,请继续使用它。
瞧瞧吧codepen
PS:我使用的是谷歌Chrome浏览器版本22在Mac OS 10.6
编辑:火狐13不具备clipboardData对象,即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);
}
});
});
这个工程并粘贴或者使用CTL + V或从菜单时会拒绝字母和特殊字符。不过,我注意到,在表单拒绝之前,用户粘贴不需要的字符后,有时会出现延迟。
通常情况下,拒绝不需要的字符只会在一两秒后发生。但是有少数情况下,在文本被清除之前等待约10秒。我猜这是因为(a)我很清新,观察行为和一些奇怪的缓存行为导致Javascript的延迟工作很快或(b)一些循环问题的Javascript或(c)一些组合的都。
虽然这在大多数生产环境中都能正常工作。我怀疑用户在提交前一遍又一遍刷新页面。
但是,我想知道是否有更优化的解决方案。欢迎提出改进这方面的建议。
http://aseptik.net/demo/allowing-just-numeric-text-on-input-text-field/为你演示需要我相信。 – Okky
但此代码只适用于按键按下鼠标右键点击 –
@ user1647898我有posy一个答案,照顾鼠标右键单击 – jaychapani