为什么我将下列javascript脚本放在body中能够输出正确结果 而放在head中总是说邮箱错误,即使正确脚本如下

[复制链接]
查看11 | 回复1 | 2011-5-17 04:40:53 | 显示全部楼层 |阅读模式
varsText=document.getElementById(\'mail\').value;
document.getElementById(\'mail\').onblur=functionsValue(){
sText=this.value;
}
//这是body中引用脚本情况
inputtype=\"text\"value=\"\"id=\"mail\"/
inputtype=\"button\"value=\"测试\"id=\"checkout\"onclick=\"isValidMail(sText)\"/



functionisValidMail(sText){
varreMail=/^(?:[a-zA-Z0-9][_\\-\\\\.]?)*[a-zA-Z0-9]@(?:([a-zA-Z0-9][_\\-]?)*[a-zA-Z0-9]\\.)([a-zA-Z]{2,})$/;
alert(reMail.test(sText))
}
回复

使用道具 举报

千问 | 2011-5-17 04:40:53 | 显示全部楼层
你好,是这样的:
当你把用来验证email的js脚本放到头部的时候,使用document.getElementById(\'mail\')是无法取到id为mail的DOM节点的,也就是说varsText=document.getElementById(\'mail\').value这句赋值语句没有执行预期的赋值目的,这是因为放在head元素里面的js代码在body元素内容呈现之前就开始工作了,这样的话在上面的赋值语句工作的时候,id为mail的节点都不存在当然不会有预期的赋值结果了,相反如果把js脚本放到body元素内底部,那么页面先呈现body内容,再执行js脚本,那就没什么问题了。
你可以使用firefox浏览器中的firebug工具对这个问题进行分析,在这个工具里面你可以检测到任何时候js代码运行的相关变量的值等信息。
个人不是很理解“sValue(){}”这个函数的作用,感觉像是在id为mail的输入框失去焦点的时候自动把该输入框里面的值赋值给sText。去掉这个函数相关的代码,如果正则表达式没错误,那么相信应该是个完全正确的邮件地址验证功能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行