仅允许使用jQuery的字母文本框?
我想让一个文本框只允许使用jQuery字母(az)。 任何例子?
并且对于喜欢粘贴而不是键入的邪恶用户来说可以是相同的;)
[+]漂亮的jQuery代码:
接受的答案
接受的答案可能很短,但它存在严重缺陷( 请参阅此小提琴 ):
- 无论按下什么键,光标都会移动到最后。
- 暂时显示非字母,然后消失。
- Chrome for Android存在问题(请参阅我的评论)。
一个更好的方法
以下内容创建了一个密钥代码数组(白名单)。 如果按下的键不在数组中,则忽略输入( 请参阅此小提琴 ):
$(".alpha-only").on("keydown", function(event){ // Allow controls such as backspace, tab etc. var arr = [8,9,16,17,20,35,36,37,38,39,40,45,46]; // Allow letters for(var i = 65; i <= 90; i++){ arr.push(i); } // Prevent default if not in array if(jQuery.inArray(event.which, arr) === -1){ event.preventDefault(); } });
请注意,这允许使用大写和小写字母。
我已经包含了退格键,删除键和箭头键等密钥代码。 您可以从此密钥代码列表中创建自己的白名单数组,以满足您的需求。
仅在粘贴时修改
当然,用户仍然可以粘贴非字母(例如通过CTRL + V或右键单击),因此我们仍然需要使用.on("input"...
监视所有更改.on("input"...
但仅在必要时 replace()
:
$(".alpha-only").on("input", function(){ var regexp = /[^a-zA-Z]/g; if($(this).val().match(regexp)){ $(this).val( $(this).val().replace(regexp,'') ); } });
这意味着我们仍然会有光标跳到最后的不良影响,但仅限于用户粘贴非字母时。
避免自动更正
某些触摸屏键盘将尽一切力量在用户认为必要时自动更正用户。 令人惊讶的是,这甚至可能包括autocomplete
和autocomplete
spellcheck
甚至spellcheck
都关闭的输入。
为了解决这个问题,我建议使用type="url"
,因为URL可以接受大写和小写字母,但不会自动更正。 然后,要绕过浏览器尝试validationURL,您必须在form
标记中使用novalidate
。
要仅允许使用小写字母,如果键代码不在“a”..“z”范围内,请对事件对象调用preventDefault
。 如果允许大写,请检查65..90或’A’..’Z’。
或者,也可以使用众多输入掩码中的一个。
见例子 。
$().keypress(function(e) { if(e.which < 97 /* a */ || e.which > 122 /* z */) { e.preventDefault(); } });
下面演示只允许使用Jquery的字母[az]:
$(function() { $('#txtFirstName').keydown(function(e) { if (e.shiftKey || e.ctrlKey || e.altKey) { e.preventDefault(); } else { var key = e.keyCode; if (!((key == 8) || (key == 32) || (key == 46) || (key >= 35 && key <= 40) || (key >= 65 && key <= 90))) { e.preventDefault(); } } }); });
// allow only Alphabets AZ az _ and space $('.alphaonly').bind('keyup blur',function(){ var node = $(this); node.val(node.val().replace(/[^A-Za-z_\s]/,'') ); } // (/[^az]/g,'' ); // allow only Number 0 to 9 $('.numberonly').bind('keyup blur',function(){ var node = $(this); node.val(node.val().replace(/[^0-9]/,'') ); } // (/[^az]/g,'' );
$("#test").keypress(function(event){ var inputValue = event.charCode; //alert(inputValue); if(!((inputValue > 64 && inputValue < 91) || (inputValue > 96 && inputValue < 123)||(inputValue==32) || (inputValue==0))){ event.preventDefault(); } }); $("#test1").keypress(function(event){ var inputValue = event.charCode; //alert(inputValue); if(!((inputValue > 47 && inputValue < 58) ||(inputValue==32) || (inputValue==0))){ event.preventDefault(); } }); $("#test3").keypress(function(event){ var inputValue = event.charCode; //alert(inputValue); if(!((inputValue > 64 && inputValue < 91) || (inputValue > 96 && inputValue < 123)||(inputValue==32)||(inputValue > 47 && inputValue < 58) ||(inputValue==32) || (inputValue==0))){ event.preventDefault(); } });
For letters:
For Numbers:
For Alphanumeric:
感谢第一个答案..做了这个..
这有一些改进,如带有重音的字母,并且更改“输入”的“模糊”可以修正暂时显示的非字母,当您使用鼠标选择文本并更正拖动时也是如此。
JQuery函数只允许小写和大写字母:
文本域:
JQuery函数:
$('#a').keydown(function (e) { if (e.ctrlKey || e.altKey) { e.preventDefault(); } else { var key = e.keyCode; if (!((key == 8) || (key == 32) || (key == 46) || (key >= 35 && key <= 40) || (key >= 65 && key <= 90))) { e.preventDefault(); } } });
@dev-null-dweller
描述的解决方案绝对@dev-null-dweller
。
但是,从jQuery 3.0
, .bind()
方法已被弃用。 它被.on()
方法取代,用于将事件处理程序从jQuery 1.7
附加到文档,因此不鼓励使用它。
在这里查看jQuery 3.0的弃用方法列表: http : //api.jquery.com/category/deprecated/deprecated-3.0/
所以解决方案是使用.on()
方法而不是.bind()
。
如果您需要绑定现有元素,那么代码将是:
$('.alphaonly').on('keyup blur', function(){ var node = $(this); node.val( node.val().replace(/[^az]/g,'') ); });
如果需要绑定到动态元素,代码将是:
$(document).on('keyup blur', '.alphaonly', function(){ var node = $(this); node.val(node.val().replace(/[^az]/g,'') ); });
您需要将事件绑定到文档或文档加载中已存在的其他元素。
希望这对新版本的jQuery很有帮助。
支持退格:
new RegExp("^[a-zA-Z \b]*$");
此选项不会检查移动设备。 所以你可以使用jQuery Mask Plugin并使用以下代码:
jQuery('.alpha-field, input[name=fname]').mask('Z',{translation: {'Z': {pattern: /[a-zA-Z ]/, recursive: true}}});