我不希望用户允许在文本框中粘贴任何非字母数字字符。 如何在Javascript中限制此操作? 谢谢!
答案 0 :(得分:7)
使用jQuery,这是一种方法:
HTML:
<form name='theform' id='theform' action=''>
<textarea id='nonumbers' cols='60' rows='10'> </textarea>
</form>
JavaScript的:
$().ready(function(){
$("textarea#nonumbers").keyup(removeextra).blur(removeextra);
});
function removeextra() {
var initVal = $(this).val();
outputVal = initVal.replace(/[^0-9a-zA-Z]/g,"");
if (initVal != outputVal) {
$(this).val(outputVal);
}
};
编辑:正如评论中所说,原始(使用.keyup()事件)将通过鼠标上下文菜单打开粘贴的可能性,所以我添加了一个.blur()事件。 .change()本来也是可能的,但有报道称有懈怠。另一种选择是使用.focusout()。是时候试验......
答案 1 :(得分:2)
您可以使用文本框的onblur
事件。
function remove()
{
var otxt=document.getElementById('txt1');
var val=otxt.value;
for(i=0;i<val.length;i++)
{
var code=val.charCodeAt(i);
if(!(code>=65 && code<=91) && !(code >=97 && code<=121) && !(code>=48 && code<=57))
{ otxt.value=""; return ; }
}
}
<input type="text" id="txt1" onblur="remove();" />
输入非字母数字值时,它将删除文本框的所有值。
答案 2 :(得分:1)
为什么没有人建议使用OnPaste
事件?这在IE,Safari和Chrome中完全支持。
Docs for using OnPaste in Webkit
在JQuery中,它看起来像这样:
$(input).bind("paste", function(e){ RemoveNonAlphaNumeric(); })
占据了浏览器市场的75%。
如果您使用JQuery,OnPaste会在Firefox中自动标准化,以便它也能在那里运行。如果你不能使用JQuery,那么有一个OnInput
事件可以运行。
工作解决方案是使用快速setTimeout值来允许填充输入的value属性。
基本上是这样的:
$("input").bind("paste", function(e){RemoveAlphaChars(this, e);});
function RemoveAlphaChars(txt, e)
{
setTimeout(function()
{
var initVal = $(txt).val();
outputVal = initVal.replace(/[^0-9]/g,"");
if (initVal != outputVal)
$(txt).val(outputVal);
},1);
}
我已经在IE,Chrome和Firefox中对此进行了测试,效果很好。超时速度非常快,您甚至无法看到正在删除的字符。
答案 3 :(得分:0)
我不确定如何阻止粘贴,但您可以在提交或更改事件中过滤内容。
答案 4 :(得分:0)
最好验证表单 - 检查这个优秀的jQuery插件 - http://docs.jquery.com/Plugins/Validation/,然后您可以使用“数字”规则:http://docs.jquery.com/Plugins/Validation/Methods/number。真的很简单,很容易调整!
答案 5 :(得分:0)
假设:
<textarea id="t1"/>
你可以修改textarea的onchange
事件处理程序,去掉任何不是字母数字的东西:
document.getElementById('t1').onchange = function () {
this.value = this.value.replace(/\W/,'');
}