无语啊太奥妙了 谁能解释下 调用ShowText("+(i+1)+")i+1是参数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 跟闭包的作用相似(function(i){a[i].onclick=function(){ShowText(i+1)); })(i) 怎麼運行不了<%@ 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>請教!!!! (function(i){a[i].onclick=function(){ShowText(i+1);}})(i)这样才对 <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> new Function("ShowText("+(i+1)+")")去掉左右括号,变成"ShowText("+(i+1)+")"再根据加号分三部分ShowText( (i+1) )因为i+1这个参数,也用了个左右括号,所以看起来复杂 不觉得有什么奥妙 对于没有参数的自定义函数,可以用对象.onclick=函数名的形式进行调用,有参数的还是用对象.onclick=new Function("函数名("+i+")")的形式进行调用,其中i为参数,如果要要用i+1做参数,就将i+1用括号括起来。。 拜下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]; }} 总而言之,事件函数是想取到变化的i,即将i保存到某个域中。有两种方式,一是将i作为属性保存下来。二是利用闭包将i作为实参或局部变量保存下来。看看这篇文章,http://blog.csdn.net/zhouruitao/archive/2008/09/11/2913936.aspx 在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> 给你举个列子var func=new Function("a","b","return a+b");alert(func(1,2)); 構造一個閉包!關于閉包,可以參見:http://www.v-ec.com/jslib/【Scope Chain And Closure】部分 如何定时获取网页地址 调用多个function应该怎么写。 在线等,解决这种 特殊浮动广告条 的问题! 比较两数大小 数据库读取的图文怎么实现自动滚动自动暂停一直循环 诸位高人,一个innerHTML的问题一直搞不定,请指点。 怎样给type=file的元素负值??? 关于树形目录 有一个挺长的页面,在下方有一个iframe,怎样在iframe里的内容load完毕后,自动滚动页面至iframe处? 如何让页面过度得连贯 javascript取值问题 主页如何控制window.open弹开的页面?
(function(i){a[i].onclick=function(){ShowText(i+1)); })(i)
<%@ 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>
請教!!!!
这样才对
<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>
去掉左右括号,变成"ShowText("+(i+1)+")"
再根据加号分三部分ShowText(
(i+1)
)
因为i+1这个参数,也用了个左右括号,所以看起来复杂
不觉得有什么奥妙
对象.onclick=函数名
的形式进行调用,
有参数的还是用
对象.onclick=new Function("函数名("+i+")")
的形式进行调用,其中i为参数,如果要要用i+1做参数,就将i+1用括号括起来。。
return function() <<<<<----------这部最最关键啊 为什么要return一下才能有效果 什么道理?
{
var c = new Array();
c[1] = 111;
c[2] = 222;
c[3] = 333;
document.getElementById("detials").innerHTML = c[n];
}
}
有两种方式,一是将i作为属性保存下来。二是利用闭包将i作为实参或局部变量保存下来。看看这篇文章,
http://blog.csdn.net/zhouruitao/archive/2008/09/11/2913936.aspx
第一种:
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>
var func=new Function("a","b","return a+b");
alert(func(1,2));
構造一個閉包!關于閉包,可以參見:
http://www.v-ec.com/jslib/【Scope Chain And Closure】部分