Javascript onclick异常行为

时间:2014-09-03 00:58:33

标签: javascript function firefox onclick opera

我正在创建一个日历脚本,它可以在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的互联网浏览器与我的代码合作?

1 个答案:

答案 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的最终值执行