function valid(valid){
if (valid.value !== null && valid.value !== ""){
valid.id = "success";
}}
function validEmail(valid){
var atpos = valid.value.indexOf("@");
var dotpos = valid.value.lastIndexOf(".");
if (atpos > 0 && dotpos > atpos+1 && dotpos+2 < valid.length){
valid.id = "success";
}}
当用户在文本框中输入电子邮件地址时,我使用onkeyup
来调用函数validEmail()
。即使我输入有效的电子邮件地址,ID也不会改为&#34;成功。&#34; (id="success"
所做的只是将输入变为绿色背景。)
有谁知道我做错了什么?我希望在输入有效的电子邮件时文本框变为绿色。
另外,我在onsubmit上调用相同的函数,然后就可以了。任何帮助将不胜感激。
答案 0 :(得分:1)
您的代码正在调用&#34; valid.length&#34;没有定义。
固定代码为:
function validMe(object){
var atpos = object.value.indexOf("@");
var dotpos = object.value.lastIndexOf(".");
if (atpos > 0 && dotpos > atpos+1 && dotpos+2 < object.value.length) {
object.id = "success";
}
}
在http://jsfiddle.net/suugqrdz/
上进行测试另外,作为建议,使用正则表达式验证电子邮件,它比自己提供电子邮件更容易,更可靠。
编辑正则表达式
function validMe(object){
var atpos = object.value.indexOf("@");
var dotpos = object.value.lastIndexOf(".");
if(atpos < 0 && dotpos < 0) {
object.id = "default";
return; //So you don't test unnecessarily
}
//var againAnotherMatch = /.+@.+\..+/;
//var anotherMatch = /(.+)@(.+){2,}\.(.+){2,}/;
var match = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
if (match.test(object.value)) {
object.id = "success";
}
else {
object.id = "default";
}
}
答案 1 :(得分:0)
我建议您使用插件来实现您的目标,而不是尝试自己验证电子邮件地址。有些边缘情况会使您的验证失败,但实际上仍然是有效的电子邮件地址。
我建议您使用以下插件
或者,如果你觉得这个解决方案(正如戴夫指出的那样)对你的需求来说太过分了。有关一个简单的示例,请参阅此帖