//为导航表格添加行(导航表格对象,表格行数,导航名称数组,事件数组)
function addTr(table,trLen,names,events)
{
for(var i = 0; i < trLen; i++)
{
var newTr = table.insertRow();
var newTd = newTr.insertCell();
newTd.id = "n" + i;
newTd.innerHTML = names[i];
newTd.className = 'n_style1';
if(window.addEventListener){ // Mozilla, Netscape, Firefox
//
} else { // IE
newTd.onclick = events[i];
newTd.attachEvent('onclick',function(){setNavigation(i,trLen);});
}
}
}//左侧导航条切换
function setNavigation(cursel,n)
{
alert(cursel);
for(i = 0; i < n; i++)
{
var menu=document.getElementById("n" + i);
menu.className=i==cursel?"n_style2":"n_style1";
}
}问题是这样的,需要给动态生成的表格中的TD添加点击事件
通过newTd.onclick = events[i];//是事件数组,不带参数,下面的函数需要参数
和newTd.attachEvent('onclick',function(){setNavigation(i,trLen);});
给TD挂事件,前面一个加载正常,后面的函数attachEvent中的参数始终有问题
其中i是变量,比如i的值分别为0,1,2
那么点击TD触发setNavigation函数中的值却始终为4难道这样挂事件不对吗?请了解的人帮个忙,谢谢!

解决方案 »

  1.   

    更正:TD触发setNavigation函数中的值却始终为3
      

  2.   


    (function(newTd){
    newTd.attachEvent('onclick',function(){setNavigation(i,trLen);});})(newTd);
      

  3.   

    用TABLE来拦截click事件事件中获取的event对象 可以得到触发click的源对象
      

  4.   

    写错了(function(newTd,i){
    newTd.attachEvent('onclick',function(){setNavigation(i,trLen);});})(newTd,i);
      

  5.   

    (function(newTd,i){
    newTd.attachEvent('onclick',function(){setNavigation(i,trLen);});})(newTd,i);
    你的问题引起的原因是javascript的闭包
    这里先声明一个匿名函数,
    function(newTd,i){
    newTd.attachEvent('onclick',function(){setNavigation(i,trLen);});})
    然后()加两个参数,newTd,i,执行这个匿名函数