Javascript 为什么IE在我的输入字段中不支持我的特殊字符拦截器脚本?
我的剧本是这样的:Javascript 为什么IE在我的输入字段中不支持我的特殊字符拦截器脚本?,javascript,internet-explorer,filter,special-characters,keypress,Javascript,Internet Explorer,Filter,Special Characters,Keypress,我的剧本是这样的: var emailmask = /^[a-z0-9.]/g; function restrictCharacters(myfield, e, restrictionType) { if (!e) var e = window.event if (e.keyCode) code = e.keyCode; else if (e.which) code = e.which; var character = String.fromCharCode(code); if (code==
var emailmask = /^[a-z0-9.]/g;
function restrictCharacters(myfield, e, restrictionType) {
if (!e) var e = window.event
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code);
if (code==27) { this.blur(); return false; }
if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) {
if (character.match(restrictionType)) {
return true;
} else {
return false;
}
}
}
输入:
<input type="text" name="fx_username" value="asd" id="username" class="normal email need" onkeypress="return restrictCharacters(this, event, emailmask);"/>
它只是不工作与IE,但FF,铬是好的。这件事你能帮我吗
编辑:不工作意味着,它没有去除像@{}·$223这样的特殊字符。该函数在几个方面是不正确的
var
。传统的写作方式是
e=e | | window.event
但是,在这种情况下,它实际上不会正常工作,因为“onkeypress”属性值中的代码假定它可以使用window.event
。这是不正确的,在Firefox中不起作用var
将“code”定义为局部变量此
将被设置为元素,而实际上第一个参数(“myfield”)是引用元素的唯一对象未定义的
很难说您希望代码在这里做什么,但是在所有这些错误得到修复之前,没有明确的方法来说明如何改进它。您的函数并不总是有返回值。
如果出现这种情况:
if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40)
不匹配,它将不返回任何内容。看起来浏览器中的行为有所不同。在MSIE中,我认为它在某种程度上没有被评估为false
解决方案:在函数末尾添加以下内容:
return false;
定义“不起作用”。发生了什么?你的正则表达式对于电子邮件验证来说很糟糕。。如果我的电子邮件地址中有
-
或-
或+
(是的,这是完全有效的)怎么办?你不应该使用幻数;最好使用的常量。实际上,代码通常几乎不可读。你说它是一个特殊的拦截器,但实际上它是一个特殊的接收者。RFC 822中作为正则表达式允许的电子邮件地址的完整范围在这里:只有地址部分在这里有一个很好的分析:任何更少的,或者你没有正确过滤,或者因为客户的邮件地址而拒绝客户。