调用ShowText("+(i+1)+")
i+1是参数

解决方案 »

  1.   

    跟闭包的作用相似
    (function(i){a[i].onclick=function(){ShowText(i+1)); })(i)
      

  2.   

    怎麼運行不了
    <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'ok.jsp' starting page函数自动增加!!</title>
        

      </head>
      <script type="text/javascript">
     
              var a=document.getElementsByTagName("a"); 
               for(var i=0;i <a.length;i++)
                a[i].onclick=new Function("ShowText("+(i+1)+")"); 
                 
               function ShowText(n){ 
                 var c=new Array(); 
                   c[1]=111; 
                   c[2]=222 ;
                   c[3]=333 ;
                   document.getElementById("detials").innerHTML=c[n]; 
              } 
      </script>
      <body>
        <a href='#'>显示1 </a> <br /> 
        <a href='#'>显示2 </a> <br /> 
        <a href='#'>显示3 </a> <br /> 
        <div id="detials"> </div>   </body>
    </html>
    請教!!!!
      

  3.   

    (function(i){a[i].onclick=function(){ShowText(i+1);}})(i)
    这样才对
      

  4.   

    <a href='#'>显示1</a><br />
    <a href='#'>显示2</a><br />
    <a href='#'>显示3</a><br />
    <div id="detials"></div><script type="text/javascript">var a=document.getElementsByTagName("a");for(var i = 0; i < a.length; i++) {
      a[i].onclick = getFunc(i + 1);
    }function getFunc(n) {
      return function() {
          var c = new Array();
          c[1] = 111;
          c[2] = 222;
          c[3] = 333;
          document.getElementById("detials").innerHTML = c[n];
        }
    }
    </script>
      

  5.   

    new Function("ShowText("+(i+1)+")")
    去掉左右括号,变成"ShowText("+(i+1)+")"
    再根据加号分三部分ShowText(
                (i+1)
                 )
    因为i+1这个参数,也用了个左右括号,所以看起来复杂
      不觉得有什么奥妙 
      

  6.   

    对于没有参数的自定义函数,可以用
    对象.onclick=函数名
    的形式进行调用,
    有参数的还是用
    对象.onclick=new Function("函数名("+i+")")
    的形式进行调用,其中i为参数,如果要要用i+1做参数,就将i+1用括号括起来。。
      

  7.   

    拜下6,7楼的,感谢8楼的照顾小白.打破砂锅问到底啊!!!!!!!!!!!function getFunc(n) {
      return function() <<<<<----------这部最最关键啊 为什么要return一下才能有效果 什么道理?
        {
          var c = new Array();
          c[1] = 111;
          c[2] = 222;
          c[3] = 333;
          document.getElementById("detials").innerHTML = c[n];
        }
    }
      

  8.   

    总而言之,事件函数是想取到变化的i,即将i保存到某个域中。
    有两种方式,一是将i作为属性保存下来。二是利用闭包将i作为实参或局部变量保存下来。看看这篇文章,
    http://blog.csdn.net/zhouruitao/archive/2008/09/11/2913936.aspx
      

  9.   

    在js中你可以使用3种方法声明函数
    第一种:
    function funcName(){
       //jscode
    }第二种:
    var funcName=function(){
       //jscode
    }第三种:
    var funcName=new Function("参数列表","jscode");你原理的代码中用的就是第三中方法声明的匿名函数,
    采用这种方法声明函数时,函数实现和参数列表都是
    用字符串来表示的,所以他的代码没有问题,而你的
    a[i].onclick=function(){
       ShowText("+(i+1)+");

    是采用的第二种方法来实现的,函数的实现需要用
    js代码而不是字符串,所以会报错。其实实现你要的功能,也可以这样
    <a href='#'>显示1 </a> <br />
    <a href='#'>显示2 </a> <br />
    <a href='#'>显示3 </a> <br />
    <div id="detials"> </div>
    <script>
    var a=document.getElementsByTagName("a");
    for(var i=0;i <a.length;i++){
       a[i].order=i;
       a[i].onclick=ShowText;
    }function ShowText(e){
       var evt=e||window.event;
       var srcEl=evt.target||evt.srcElement;
       var c=[111,222,333];
       document.getElementById("detials").innerHTML=c[srcEl.order];
    }
    </script>
      

  10.   

    给你举个列子
    var func=new Function("a","b","return a+b");
    alert(func(1,2));
      

  11.   


    構造一個閉包!關于閉包,可以參見:
    http://www.v-ec.com/jslib/【Scope Chain And Closure】部分