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

varsText=document.getElementById('mail').value;document.getElementById('mail').onblur... var sText = document.getElementById('mail').value;
document.getElementById('mail').onblur = function sValue(){
sText = this.value;
}
//这是body中引用脚本情况
<input type="text" value="" id="mail"/>
<input type="button" value="测试" id="checkout" onclick="isValidMail(sText)" />

function isValidMail(sText) {
var reMail = /^(?:[a-zA-Z0-9]+[_\-\+\.]?)*[a-zA-Z0-9]+@(?:([a-zA-Z0-9]+[_\-]?)*[a-zA-Z0-9]+\.)+([a-zA-Z]{2,})+$/;
alert(reMail.test(sText))
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset="gb2312"/>
<title>测试:用Javascript正则表达式验证Email地址</title>
<script type="text/javascript">
var sText = document.getElementById('mail').value;
document.getElementById('mail').onblur = function sValue(){
sText = this.value;
}
function isValidMail(sText) {
var reMail = /^(?:[a-zA-Z0-9]+[_\-\+\.]?)*[a-zA-Z0-9]+@(?:([a-zA-Z0-9]+[_\-]?)*[a-zA-Z0-9]+\.)+([a-zA-Z]{2,})+$/;
alert(reMail.test(sText))
}
</script>
</head>
<body>
<p>
输入Email地址,点击测试,错误的地址将返回 false...正确的,显示成? 自己猜:
</p>
<input type="text" value="" id="mail"/>
<input type="button" value="测试" id="checkout" onclick="isValidMail(sText)" />
</body>
</html>
这个不能正确验证11@qq.com
但是当把<script type="text/javascript">放入body就行
展开
 我来答
js_leezi
2011-05-17 · TA获得超过188个赞
知道答主
回答量:68
采纳率:0%
帮助的人:65.5万
展开全部
你好,是这样的:
当你棚樱把用来验证email的js脚本放到头部的时候,使用document.getElementById('mail')是无搜没法取到id为mail的DOM节点的,也就是说var sText = document.getElementById('mail').value这句赋值语句没有执行预期的赋值目的,这是因为放在head元素里面的js代码在body元素内容呈现之前就开始工作了,这样的话在上面的赋值语句工作的时候,id为mail的节点都不存在当然不会有预期的赋值结果了,相反如果把js脚本放到body元素内底部,那么页面先呈现body内容,再执行js脚本,那就没什么问题了。
你可以使用firefox浏览器中的firebug工具对这个问题进行分析,在这个工具里面你可以检测到任何时候js代码运行的相关变量的值等信息。
个人不是很理解“sValue(){}”这个函数的作用,感觉像是在id为mail的输入框失去焦点的时候自动把该输入框里面的值赋值给sText。去掉这个函数相关的代码,如果正则表达链漏丛式没错误,那么相信应该是个完全正确的邮件地址验证功能。
东门幼岚
2011-05-16 · TA获得超过165个赞
知道答主
回答量:415
采纳率:0%
帮助的人:228万
展开全部
没有一定说javascript一定要放在head之后而不能放在body之后阿。
javascript作为一种脚本慎派培羡数语言可以放在html页面中任何位置。只不过有些处于习惯或者为了方便维护,才把javascript写在body之前。
至于
script language=javasscript
//javascript appears here.
表示以下在<script>元素里的脚本是javascript脚本语宽唯言,browser会用javascript插件来解释一下语句的。这句话一般会写在<script>元素里。
下面那句是注释,没有特殊意义,browser也不会去解释这些语句的,这些是给developer看得。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ruby_hit
2011-05-16
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
不会出问题,你出错的代仔仔码是怎么样的?你获得输入的邮箱地址是在函数体内吗?如果你放在BODY中,你念毕汪可以试试放在函数体内。或者报错的数野时候,看看你获得邮箱地址到底是不是正确的邮箱地址。我觉得应该获得的邮箱地址就是错误的。否则不会出这个问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式