IE中不支持给事件赋值的,但是FF支持
我写成setAttribute('onclick',“testvalue()”)没有任务反应
写成setAttribute('onclick',testvalue())会直接执行testvalue()函数,但是并不会给对象添加onclick事件
最后我写成setAttribute('onclick',function (){testvalue()})这样终于正确的添加onclick事件了,但是却遇到了一个传值的问题,我的代码如下:       items2 = oDoc.selectNodes("//CLASSNAME/Table/pcl2_id");                  
       var itemsLength=items1.length;
       for(i=0;i<itemsLength;i++)                                                                 
        {          
          var newOption = document.createElement("li");
          newOption.setAttribute('onclick',function (){load2(items2[i].text);})     
        }
这句function (){load2(items2[i].text);}中的items2[i].text不能被赋值进去,不知各位大大是否有办法解决下,用其他方式也行,只要能给对象动态设置onclick事件就行,因为对象都是用createElement生成的,用getElementById的方式不现实,跪求解答,搞了一天了,郁闷死了!!!!

解决方案 »

  1.   

    newOption.setAttribute('onclick',function (){load2(items2[i].text);}) 改成newOption.setAttribute('onclick',function (v){return function(){load2(v);}}(items2[i].text)) 
      

  2.   

    楼上的可以,也可以直接把值写到function(xxx)这样只有函数执行,就会把值传过去
      

  3.   

    for(i=0;i<itemsLength;i++)                                                                 
            {         
    (function(index){
              var newOption = document.createElement("li");
              newOption.setAttribute('onclick',function (){load2(items2[index].text);})
    //或者
             newOption.onclick=function (){load2(items2[index].text);
    })(i); 
                   
            }
    其实我没看明白你的问题
      

  4.   


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
      <script>
      var array=[1,2,3,4,5,6];
      function testvalue(val)
    {
       alert(val);
    }
      function add(){
       for(i=0,len=array.length;i<len;i++)                                                                 
            {          
              var newOption = document.createElement("li");
      newOption.innerHTML=i+1;
              newOption.onclick=function (val){ return function(){testvalue(val);}}(array[i])
      
    document.getElementById('div').appendChild(newOption);        }
    }  </script>
     </HEAD> <BODY>
      <input type='button' value='click me' onclick='add()' />
    <div id='div'></div>
     </BODY>
    </HTML>
      

  5.   

    newOption.setAttribute('onclick'可以直接写newOption.onclick
      

  6.   

    setAttribute('onclick',testvalue())=》setAttribute('onclick',testvalue)  应设置函数句柄
      

  7.   

    是你邦定事件的方法不对function addEventListener(control, eventName, fn) {

    if (window.attachEvent) {
    control.attachEvent('on' + eventName, fn);
    } else if (window.addEventListener) {
    control.addEventListener(eventName, fn, false);
    } else {
    control['on' + eventName] = fn;
    }
    }邦定的时候用addEventListener(newOption, 'click', function (){load2(items2[i].text);});
      

  8.   

    应该不是items2[index].text没有被赋值进去,而是items2 = oDoc.selectNodes("//CLASSNAME/Table/pcl2_id");
    没有正确取得items2
    看看我的测试代码
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE> New Document </TITLE>
      <META NAME="Generator" CONTENT="EditPlus">
      <META NAME="Author" CONTENT="">
      <META NAME="Keywords" CONTENT="">
      <META NAME="Description" CONTENT="">
      <script>
    function load() {
    var test = document.getElementById("test");
    var testNum = 1; test.setAttribute("onclick", function() {alert(testNum);});
    }

      </script>
     </HEAD> <BODY onload="load();">
      <div id="test">123</div>
     </BODY>
    </HTML>