神奇:js一个函数里定义了两个变量,其中一个变量在另一个函数里也能调用,另一个变量却不能调用

oooome 2014-04-12 11:10:13
页面代码如下:
<!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=utf-8" />
<title>无标题文档</title>
<style>
html,body{height:100%;overflow:hidden;}
#popupcontent{
position: absolute;
visibility: hidden;
overflow: hidden;
border:1px solid #CCC;
background-color:#F9F9F9;
border:1px solid #333;
padding:5px;
margin:100px;
z-index:3;
}
#popup1{
position: absolute;
z-index:2;
background:url(images/graybg.png);
visibility: hidden;
}
.h1{ width:400px;height:36;font:32px 微软雅黑,PTSansNarrow,sans-serif;font-weight: bold;color: #6666FF; padding-bottom:16px;}
.main1{ width:424px; height:236; background:#FFFFFF;margin-top:100px;padding:10px;border:solid #33CCFF 1px;}
.input1{
border:#ffffff 0px solid;
background-Color: #FF0080;
color:#ffffff;
padding:0 5px 5px 0;
font:32px 微软雅黑,PTSansNarrow,sans-serif;
font-weight:bold;
width:100px;
}
</style>
<script type="text/javascript">
var baseText = null;
function showPopup(w,h){
var popup1=document.getElementById("popup1");
var popup = document.getElementById("popupcontent");
popup.style.width = w + "px";
popup.style.height = h + "px";
popup1.style.width="100%";
popup1.style.height="100%";
popup.style.visibility = "visible";
popup1.style.visibility = "visible";
}
function areacook() {
var popup = document.getElementById("popupcontent");
var radio1=document.getElementsByName("area");
for(var i=0;i<radio1.length;i++){
if (radio1.item(i).checked==true){
var exp = new Date();
exp.setTime(exp.getTime() + 30*24*60*60*1000);
document.cookie = "area" + "="+ escape(radio1.item(i).value) + ";expires=" + exp.toGMTString();
popup.style.visibility = "hidden";
popup1.style.visibility = "hidden";
break;
}
}
}
</script>
</head>
<body onload="showPopup(424,236);">
<center><div class="main1" id="popupcontent">
<div class="h1">选择区域</div>
<div>
<label class="input1"><input name="area" type="radio" checked="true" value="1" />金水区</label>
<label class="input1"><input name="area" type="radio" value="2" />中原区</label>
<label class="input1"><input name="area" type="radio" value="3" />管城区</label>
<br><br>
<label class="input1"><input name="area" type="radio" value="4" />高新区</label>
<label class="input1"><input name="area" type="radio" value="5" />经开区</label>
<label class="input1"><input name="area" type="radio" value="6" />惠济区</label>
<br><br>
<button onClick="areacook()">确 定</button>
</div>
</div></center>
<div id="popup1"></div>
<div>this is a test message.</div>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>
</html>
...全文
770 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
搬砖de蚂蚁 2014-04-14
  • 打赏
  • 举报
回复
肯定是你代码有问题,没有什么神奇的。。
神之左手 2014-04-14
  • 打赏
  • 举报
回复
JS中变量作用域如下 1.一般顺序代码中定义的变量 本质可以看成公用变量 可以在任意位置调用 2.函数体中定义的变量,一般只有在该函数体中使用,没有办法在该函数之外或者其他函数中使用 3.特殊情况,比如变量重名,对象属性等等,这个要自己体会 就你这个问题,可能如楼上描述DOM元素带id的或者在浏览器中会有自己的同名对象,但极力不建议用这些浏览器的该特性,因为非通用 所以按上面的作用域说法,你就应该在顺序代码中靠前的位置把需要多个函数使用的公共变量定义好,而不是定义在函数体中
oooome 2014-04-12
  • 打赏
  • 举报
回复
引用 3 楼 u011461314 的回复:
不神奇,这 popup1 popupcontent 直接可用了。 早就存在了。
确实是,我发现这里直接用id就行了,没必要用document.getElementById再定义变量。
zhjdg 2014-04-12
  • 打赏
  • 举报
回复
不神奇,这 popup1 popupcontent 直接可用了。 早就存在了。
  • 打赏
  • 举报
回复
var popup1=document.getElementById("popup1"); var popup = document.getElementById("popupcontent"); 你可以放在函数外边,定义为全局变量,供所有函数使用 你之前的处理,肯定是访问不到的,也许出现了错误,只不过页面看上去还算正常,也许你可以通过开发者人员工具来查看控制台所出现的错误
oooome 2014-04-12
  • 打赏
  • 举报
回复
在第一个函数里定义了popup和popup1两个变量,在第二个函数里也需要用到这两个变量,测试发现popup必须重新定义,popup1却不需要,这是什么情况?
l676331991 2014-04-12
  • 打赏
  • 举报
回复
因为(某些)浏览器会以id为变量名在全局下创建该dom对象的引用。 具体哪些浏览器有这个特性,没兴趣去一一测试,因为这个特性没有什么利用价值,反而有很多副作用。 这个特性不是一个标准,因此请不要依赖这个特性,个人觉得,还是乖乖的getElementById吧。
licip 2014-04-12
  • 打赏
  • 举报
回复
为了兼容各种浏览器,建议你放在外面定义,但要在id的元素加载完后,获取对象用:document.getElementById("id");
  • 打赏
  • 举报
回复
请斑竹出来解决下。
天际的海浪 2014-04-12
  • 打赏
  • 举报
回复
ie浏览器可以直接用元素的id访问元素。其它的浏览器必须要用document.getElementById()

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧