比如一个ul li列表,点击任一li后都显示其在ul里面的index值,我是用循环实现的,但只要一循环,i的值就会变成最大值,无法达到这样的效果。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>javascript</title>
<style type="text/css">
html,body,ul,li{ margin:0; padding:0; list-style:none; border:0; }
body{ padding:2em; font:100%/1.6 Verdana; color:#666; background: #fff; }
a{ text-decoration: none; }
</style>
</script>
</head>
<body>
<ul id="info">
<li>apple</li>
<li>google</li>
<li>facebook</li>
<li>yahoo</li>
<li>microsoft</li>
<li>ibm</li>
</ul>
<script type="text/javascript">
//<![CDATA[
var infoList=document.getElementById("info").getElementsByTagName("li");
var infoListLength=infoList.length;
for(var i=0; i<infoListLength; i++){
alert(i+" : "+infoList[i].innerHTML);
//下面不知道如何实现了,一循环 i 的值就会变成最大值。
infoList[i].onclick=function(){ alert("显示其index值"); }
}
//]>
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>javascript</title>
<style type="text/css">
html,body,ul,li{ margin:0; padding:0; list-style:none; border:0; }
body{ padding:2em; font:100%/1.6 Verdana; color:#666; background: #fff; }
a{ text-decoration: none; }
</style>
</script>
</head>
<body>
<ul id="info">
<li>apple</li>
<li>google</li>
<li>facebook</li>
<li>yahoo</li>
<li>microsoft</li>
<li>ibm</li>
</ul>
<script type="text/javascript">
//<![CDATA[
var infoList=document.getElementById("info").getElementsByTagName("li");
var infoListLength=infoList.length;
for(var i=0; i<infoListLength; i++){
alert(i+" : "+infoList[i].innerHTML);
//下面不知道如何实现了,一循环 i 的值就会变成最大值。
infoList[i].onclick=function(){ alert("显示其index值"); }
}
//]>
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>javascript</title>
<style type="text/css">
html,body,ul,li{ margin:0; padding:0; list-style:none; border:0; }
body{ padding:2em; font:100%/1.6 Verdana; color:#666; background: #fff; }
a{ text-decoration: none; }
</style>
</script>
</head>
<body>
<ul id="info">
<li>apple</li>
<li>google</li>
<li>facebook</li>
<li>yahoo</li>
<li>microsoft</li>
<li>ibm</li>
</ul>
<script type="text/javascript">
//<![CDATA[
var infoList=document.getElementById("info").getElementsByTagName("li");
var infoListLength=infoList.length;
for(var i=0; i<infoListLength; i++){
alert(i+" : "+infoList[i].innerHTML);
//下面不知道如何实现了,一循环 i 的值就会变成最大值。
infoList[i].onclick=function(i){ return function(){alert("index为"+i)} }(i)
}
//]>
</script>
</body>
</html>
infoList[i].onclick=aa(i);
function aa(i)
{
return function(){alert("index为"+i);};
}
这个是方便的写法
定义函数加立马调用
这个函数返回一个函数
其实就是变成
onclick = function(){alert("index为"+i的值)}
function aa(i)
{
return function(){alert("index为"+i);};
}
/*=========*/
infoList[i].onclick=function(i){ return function(){alert("index为"+i)} }(i)就可以,而:infoList[i].onclick=function(){ alert(i); //i变成了最大值 }; 就不可以?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="../Scripts/jquery-1.6.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$("#info li").click(function () {
var $curentLi = $(this);
$("#info li").each(function (k, v) {
if ($(v).text() == $curentLi.text()) {
alert(k);
}
});
});
});
</script>
</head>
<body>
<ul id="info">
<li>apple</li>
<li>google</li>
<li>facebook</li>
<li>yahoo</li>
<li>microsoft</li>
<li>ibm</li>
</ul>
</body>
</html>
我用JQUERY给你写了一个
用的时候记得添加jquery的js文件。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var ul = $('#info li');
ul.click(function () {
alert(ui.index(this) + 1);
});
});
</script>
</head>
<body>
<ul id="info">
<li>apple</li>
<li>google</li>
<li>facebook</li>
<li>yahoo</li>
<li>microsoft</li>
<li>ibm</li>
</ul>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
var ui = $('#info li');
ui.each(function(k,d){
$(this).click(function(){alert(k+1)})
})
});
</script>
</head>
<body>
<ul id="info">
<li>apple</li>
<li>google</li>
<li>facebook</li>
<li>yahoo</li>
<li>microsoft</li>
<li>ibm</li>
</ul>
</body>
</html>
for(var i=0; i<infoList.Length; i++)
{
//下面不知道如何实现了,一循环 i 的值就会变成最大值。
infoList[i].onclick=function(){ alert(i);}; }
}
//////////
上面这个循环,给infolist的所有元素注册点击事件,但并没有调用,点击时才调用。当点击时,会执行alert(i)。但这个i是局部变量,默认情况下只在循环中有效。而现在需要使用i。所以这个时候编译器会将变量i的作用域进行延长。就相当于这样的了:
var j=0;
for(var i=0; i<infoList.Length; i++)
{
j=i;
//下面不知道如何实现了,一循环 i 的值就会变成最大值。
infoList[i].onclick=function(){ alert(j);}; }
}//最后弹出的i的值实际上是j的值
for(var i=0; i<infoList.Length; i++)
{
//下面不知道如何实现了,一循环 i 的值就会变成最大值。
infoList[i].onclick=function(i){ alert(i);}; }
}