Jquery 仅在粘贴时将输入限制为数字
我有一个名为restrict numbers的类的输入文件,我想限制输入的字符只接受数字,我使用了以下代码,这很好,但我想在不完全禁用粘贴的情况下在输入文件中粘贴相同的限制: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
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, ''));
});