我希望能够做的就是每次用户在输入字段中输入新字符时验证电子邮件.当输入字段为空时,它不应显示任何内容,但当它包含字母时,它应显示无效字符的位置.
我的代码有效但输入字段为空时不显示任何内容,因为它使用嵌套的“else”而不是它应该使用的那个.有人帮忙吗?提前致谢. andyy
var tick = "<img src='images/tick.png' width='20' height='20'/>";
var cross = "<img src='images/cross.png' width='20' height='20'/>";
var email_element = document.contact_form.email_field.value;
function validate_email(id) {
if ( email_element != '' ) {
var letters = /^[A-Za-z]+$/;
if ( document.contact_form.email_field.value.match(letters) )
{
document.getElementById(id).innerHTML = tick;
valid = true;
} else {
document.getElementById(id).innerHTML = cross;
valid = false;
}
} else {
document.getElementById(id).innerHTML = '';
}
return valid;
}
解决方法:
问题很可能是这一行:
var email_element = document.contact_form.email_field.value;
您正在分配一个等于电子邮件字段值的全局变量,然后再也不会更新该变量.这不会创建到字段当前值的“活动”链接,它只是存储执行该行时的值.这反过来意味着函数中的第一个if语句if(email_element!=”)正在评估电子邮件字段的非当前值.
将该行移动到函数内部的第一个内容,然后每次运行该函数时,您将获得该字段的最新(当前)值.
编辑:此外,您没有在非嵌套的else中为有效值分配值.您应该在函数中声明有效作为局部变量,并确保在每个if和else分支中正确设置它(或者在声明它时将其默认为false).作为thomasrutter
表示你当前没有声明你的函数中的var语句有效,这意味着它将被创建为一个全局变量,这反过来意味着当你不在非嵌套的其他地方给它一个值时你的函数将返回无论前一次调用已经有效的值. (实际上,根据您发布的代码,您根本不需要有效变量:您可以说返回true;或者返回false;直接在if / else结构的每个分支内.)