我正在创建一个日历脚本,它可以在Opera浏览器中正常运行,但不适用于Firefox。麻烦发生在当天的选择中。这个特定的片段说明了这个问题。在这种情况下,dayofweek []包含31个DIV标签,每个标签都包含人们可以点击的编号。
<script type="text/javascript">
var maxdays=31;
for (var n=1;n<=maxdays;n++){
dayofweek[n].onclick="selectday("+n+")";
}
function selectday(day){alert(day+" is selected");}
</script>
此脚本通过打印选择了正确数字的消息(在歌剧中)。在Firefox中,即使我点击了点击也不会执行onclick事件。
我尝试的另一种方法是:
<script type="text/javascript">
var maxdays=31;
for (var n=1;n<=maxdays;n++){
dayofweek[n].onclick=function(){selectday(n);}
}
function selectday(day){alert(day+" is selected");}
</script>
这一次,firefox和opera都会响应,但问题是无论选择哪个号码,都会出现“31被选中”。
有谁知道我可以做些什么来让所有支持JavaScript的互联网浏览器与我的代码合作?
答案 0 :(得分:0)
Javascript不是块作用域。试试这个:
<script type="text/javascript">
var maxdays=31;
for (var n=1;n<=maxdays;n++){
dayofweek[n].onclick=selectdaywrapper(n);
}
function selectdaywrapper(day) {
function selectday(){
alert(day+" is selected");
}
return selectday;
}
</script>
您遇到的问题与范围界定以及变量如何绑定在js中有关。您在循环中创建的函数绑定到循环变量,但直到循环结束后才进行求值,因此所有onclick事件都以n的最终值执行