上面的代码有问题
重新贴一下
<style type="text/css">
.ss{ height:20px; width:100px; background-color:#999900; padding:10px;}
</style>
<body>
<script>
var data = [
{txt:'111',menu:[{txt:'1111'}]},
{txt:'222',menu:[{txt:'2222'}]},
{txt:'333',menu:[{txt:'3333'}]},
{txt:'444',menu:[{txt:'4444'}]}
]function $(Id){return document.getElementById(Id);};function create(elm,parent,fn){
var element = document.createElement(elm);
fn&&fn(element);
parent.appendChild(element);
};function cc(data){
for(var i=0;i<4;i++)
{
create('div',$('conter'),function(obj){
obj.className='ss';
obj.innerHTML=data[i].txt;
var f = i //在函数里面定义个变量,下面在这么写就可以了哈
obj.onclick = function(){aall(data[f].menu[0].txt)}
//obj.onclick = function(){aall(data[i].menu[0].txt)} //直接这么写就不行啊
})
}
}function aall(obj){
alert(obj)
}
</script>
<div id='conter'></div>
<input value='ss' type="button" onclick="cc(data)" />
</body>
重新贴一下
<style type="text/css">
.ss{ height:20px; width:100px; background-color:#999900; padding:10px;}
</style>
<body>
<script>
var data = [
{txt:'111',menu:[{txt:'1111'}]},
{txt:'222',menu:[{txt:'2222'}]},
{txt:'333',menu:[{txt:'3333'}]},
{txt:'444',menu:[{txt:'4444'}]}
]function $(Id){return document.getElementById(Id);};function create(elm,parent,fn){
var element = document.createElement(elm);
fn&&fn(element);
parent.appendChild(element);
};function cc(data){
for(var i=0;i<4;i++)
{
create('div',$('conter'),function(obj){
obj.className='ss';
obj.innerHTML=data[i].txt;
var f = i //在函数里面定义个变量,下面在这么写就可以了哈
obj.onclick = function(){aall(data[f].menu[0].txt)}
//obj.onclick = function(){aall(data[i].menu[0].txt)} //直接这么写就不行啊
})
}
}function aall(obj){
alert(obj)
}
</script>
<div id='conter'></div>
<input value='ss' type="button" onclick="cc(data)" />
</body>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<style type="text/css">
.ss{ height:20px; width:100px; background-color:#999900; padding:10px;}
</style>
<body>
<script>
var data = [
{txt:'111',menu:[{txt:'1111'}]},
{txt:'222',menu:[{txt:'2222'}]},
{txt:'333',menu:[{txt:'3333'}]},
{txt:'444',menu:[{txt:'4444'}]}
]function $(Id){return document.getElementById(Id);};function create(elm,parent,fn){
var element = document.createElement(elm);
fn&&fn(element);
parent.appendChild(element);
};function cc(data){
for(var i=0;i<4;i++)
{
create('div',$('conter'),function(obj){
obj.className='ss';
obj.innerHTML=data[i].txt;
var f = i //在函数里面定义个变量,下面在这么写就可以了哈
obj.onclick = function(){aall(data[f].menu[0].txt)}
//obj.onclick = function(){aall(data[i].menu[0].txt)} //直接这么写就不行啊
})
}
}function aall(obj){
alert(obj)
}
</script> </HEAD> <BODY>
<div id='conter'></div>
<input value='ss' type="button" onclick="cc(data)" />
</body>
</HTML>
老兄 ,你就少写了个j,该过来之后 ,两种用法都可以 呵呵
function(obj){
obj.className='ss';
obj.innerHTML=data[i].txt;
var f = i //在函数里面定义个变量,下面在这么写就可以了哈
obj.onclick = function(){aall(data[f].menu[0].txt)}
//obj.onclick = function(){aall(data[i].menu[0].txt)} //直接这么写就不行啊
}
闭包的原因啊.
function cc(data){
for(var i=0;i<4;i++)
{
create('div',$('conter'),function(obj){
obj.className='ss';
obj.innerHTML=data[i].txt;
var f = i //在函数里面定义个变量,下面在这么写就可以了哈
//obj.onclick = function(){aall(data[f].menu[0].txt)}
obj.onclick = function(i){
//aall(data[i].menu[0].txt)
return function(){
alert(data[i].menu[0].txt);
};
}(i);//直接这么写就不行啊
})
}
}
=======================
如果你不用f的话,可以采用必包来达到效果!
function cc(){
for(var i=0;i<4;i++)
{
var obj = $('conter').appendChild(document.createElement("div"));
obj.innerHTML = i;
(function(){
var f = i;
obj.onclick = function(){alert(f)}
})()
}
}
(function(){
var f = i;
obj.onclick = function(){alert(f)}
})()这里的var f = i;
其实跟
(function(i){
....
})(i)
的效果是一样的