none
为什么浏览器总是提示ONCLICK里面的函数未定义呢?我确实是定义了呀! RRS feed

  • 问题

  • html中的调用部分:

    <td>    <img      height=20px  id='_img_3e6814c6-1465-4aba-b431-05624c924dbc'  src='/_layouts/images/whiteminus.gif'  onclick="TreeDataGrid_changeDisplay(  ''  ,    '3e6814c6-1465-4aba-b431-05624c924dbc'  ,  ',3e6814c6-1465-4aba-b431-05624c924dbc.60c43dc4-52c8-49bd-918a-05c403b167a7,,60c43dc4-52c8-49bd-918a-05c403b167a7.a584ab65-1870-4bde-bc1b-f4dea9bfcc84,,'  )"  style='cursor:hand'>task5 </td> <td>2009-5-6 8:00:00 </td>

    函数部分:

    <script > 

                        function  TreeDataGrid_changeDisplay(  parentId  ,  id  ,  ids  ){ 
                         
       
                        if(  ids  ==  ','  )  return; 

                        arr    =  ids.split(','); 
       
                        pref  =  parentId  +  '_'  ; 
       
                     
                          obj    =  eval(  pref  +  arr[1].split('.')[1]    );
     
                        obj=eval(");
                        alert(obj);
                        display  =  ''; 
                        if(  obj.style.display  ==  ''  ) 
                       
                            display  =  'none'  ;
      imgId  =  pref  +  'img_'  +  id  ;minusImg='/_layouts/images/whiteminus.gif';plusImg='/_layouts/images/whiteplus.gif';
      if(  display  ==  ''  )  document.images[  imgId  ].src=  minusImg  ;
      else    document.images[imgId  ].src=  plusImg  ;
     
                          for(  i  =  1  ;  i  <  arr.length  ;  i  ++){ 
                           
                        if(  arr[i]  ==  ''  )  continue  ; 
                        arrCId  =  arr[i].split('.'); 
                        if(  display  ==  ''  &&  arrCId[0]  !=  id  )  continue  ;       
                       
                        obj  =  eval(  pref  +  arrCId[1]    );
     
       
                        if(obj==null)  continue  ;   
                        obj.style.display  =  display  ; 
       
                      if(  display  ==  'none'  ){ 
                      imgId  =  pref  +  'img_'  +  arrCId[1]  ; 
                      img  =  document.images[  imgId  ]  ; 
                      if(  img  ==  null  )  continue  ; 
                      if(  display  ==  ''  )  document.images[  imgId  ].src=  minusImg  ; 
                      else    document.images[imgId  ].src=  plusImg  ; 
                          } 
       
                        } 
                      } 
                      </script>
    • 已移动 Sheng Jiang 蒋晟 2009年5月8日 6:04 客户端脚本问题 (From:ASP.NET 与 AJAX)
    2009年5月8日 5:33

答案


  •                     string js = @"<script > 
     
                        function   TreeDataGrid_changeDisplay(   parentId   ,   id   ,   ids   ){  
                          
       
                        if(   ids   ==   ','  )   return;  

                        arr    =   ids.split(',');  
       
                        pref   =   parentId   +   '_'   ;  
       
                          alert(  'pref   +   arr[1].split('.')[1] ');            
                           obj    =   eval(  'pref   +   arr[1].split('.')[1] ' );

    使用单引号无可厚非,不过,从上面程序可以看出 pref 是一个变量,
    对于一个变量 你 使用了 alert(  'pref   +   arr[1].split('.')[1] '); 
    这个样子就使括号里的内容成了,  alert(字符串 . 字符串);
    这个样子不合乎语法.
    2009年5月8日 8:47

全部回复

  • obj=eval(");

    这个是错误的



    【孟子E章】
    2009年5月8日 5:47
    版主
  • onclick="TreeDataGrid_changeDisplay(  ''  ,    '3e6814c6-1465-4aba-b431-05624c924dbc'  ,  ',3e6814c6-1465-4aba-b431-05624c924dbc.60c43dc4-52c8-49bd-918a-05c403b167a7,,60c43dc4-52c8-49bd-918a-05c403b167a7.a584ab65-1870-4bde-bc1b-f4dea9bfcc84,,'  )" 

    为什么提上来的东西里满是这样(onclick="TreeDataGrid_changeDisplay(  ''  )的内容?
    2009年5月8日 6:23
  • 1.去掉了   obj=eval(");   alert(obj); 这两句调式语句以后,现象仍然存在的;
    2.onclick="TreeDataGrid_changeDisplay(  '' 中的'' 其实是两个单引号括起来的一个空值,我也试过了,即使不是空值,也报同样的错误。

    2009年5月8日 6:33
  • 你下面的代码存在语法问题,请一行一行注释掉调试

    你先alert(pref  +  arr[1].split('.')[1])都看看是什么

    【孟子E章】
    2009年5月8日 6:35
    版主
  • 我看了,好像根本就没有到函数里面去,ALERT()根本就没有起作用的!
    2009年5月8日 7:04
  • alert(pref  +  arr[1].split('.')[1]) 出来以后,显示是:(下划线)4a55be6f-68ee-4581-9b86-efe1bf2f6fa3,后面的eval中,我变成了eval(“pref  +  arr[1].split('.')[1]“),结果显示obj.style.display为空或者不是对象的错误,这下可有眉目了!说明不是函数没定义,是函数里面的有些对象有问题了!
    2009年5月8日 7:31
  • alert(pref  +  arr[1].split('.')[1]) 出来以后,显示是:(下划线)4a55be6f-68ee-4581-9b86-efe1bf2f6fa3,后面的eval中,我变成了eval(“pref  +  arr[1].split('.')[1]“),结果显示obj.style.display为空或者不是对象的错误,这下可有眉目了!说明不是函数没定义,是函数里面的有些对象有问题了!

    你是不是想要这样(eval("pref"  +  arr[1].split('.')[1]))
    2009年5月8日 8:29
  • 我把生成的HTML在本机上修改后,可以出来ALERT(),可是,在服务器上联机还是原来的那种情况,什么原因,唯一的区别就是  obj    =   eval(  'pref   +   arr[1].split('.')[1] ' ); 和obj    =   eval(  "pref   +   arr[1].split('.')[1] " );一个双引号,一个单引号,在程序中用单引号是因为页面文件是作为字符串动态写入的,已经用了双引号了,如下面:if (this.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), jsKey) == false)
                    {
                       
                        string js = @"<script > 
     
                        function   TreeDataGrid_changeDisplay(   parentId   ,   id   ,   ids   ){  
                          
       
                        if(   ids   ==   ','  )   return;  

                        arr    =   ids.split(',');  
       
                        pref   =   parentId   +   '_'   ;  
       
                          alert(  'pref   +   arr[1].split('.')[1] ');            
                           obj    =   eval(  'pref   +   arr[1].split('.')[1] ' );

    2009年5月8日 8:40

  •                     string js = @"<script > 
     
                        function   TreeDataGrid_changeDisplay(   parentId   ,   id   ,   ids   ){  
                          
       
                        if(   ids   ==   ','  )   return;  

                        arr    =   ids.split(',');  
       
                        pref   =   parentId   +   '_'   ;  
       
                          alert(  'pref   +   arr[1].split('.')[1] ');            
                           obj    =   eval(  'pref   +   arr[1].split('.')[1] ' );

    使用单引号无可厚非,不过,从上面程序可以看出 pref 是一个变量,
    对于一个变量 你 使用了 alert(  'pref   +   arr[1].split('.')[1] '); 
    这个样子就使括号里的内容成了,  alert(字符串 . 字符串);
    这个样子不合乎语法.
    2009年5月8日 8:47