<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>11</title>
<script>
window.onload = function(){
var list = document.getElementsByTagName("li");
for(var i = 0; i < list.length; i++){
list[i].onclick = function(){
alert(list[i].innerHTML);//为什么改成this就好了?? }
}
};
</script>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</body>
</html>
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>11</title>
<script>
window.onload = function(){
var list = document.getElementsByTagName("li");
for(var i = 0; i < list.length; i++){
list[i].onclick = function(){
alert(list[i].innerHTML);//为什么改成this就好了?? }
}
};
</script>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</body>
</html>
解决方案 »
- 像百度一样,一段脚本在页面中不执行 怎么实现的
- 有没免费网管软件公司有几台服务器和网络设备要监测,有没免费实用的。大家推荐下。
- 请问我以下三个功能一样的js怎么才能放到一个function里面啊
- 请问如何用js,保存页面刷新前的值
- 关于window.showModelDialog()方法打开的窗口
- 高分求问!集,在线等.
- Windows Opened by Script Lose Authentication or Session
- 谁能帮我写一行代码,当鼠标移至时select文本...鼠票移开时取消select
- 急!有关flash和层的问题
- table表格求和用javascript
- 求助,点击图片,使用ajax异步加载对应的视频
- js 怎么获取xml根节点下的所有子节点
list[i].onclick = function(){
alert(list[i].innerHTML);//为什么改成this就好了?? }
}
this指的就是当前被点击的那个list
并不会把
onclick=functioin(){
alert(list[i].innerHTML)
}这里的i替换成你绑定事件时的0,1,2的,而是实际执行onclick的时候才去读i的值,
而i的值早变了(你这里因为i是局部变量,onclik的时候i就是undefined)。
这个方法的this指向的是对象本身
而this将本对象已经绑定到事件中了.
经试验, i 确实是 3我本以为i是写在function里是局部变量,看来我理解错了。
看来
function foo(){
var i; //局部变量
}
事件绑定范围内的
a.onclick=function(){var i;//全局变量
}变量定义方式不一样。
如有被这一句误解的同学,抱歉。
这样写貌似也是有些问题的个人感觉是:i应该并不是全局变量,这快已经涉及到了闭包的问题。
i会一直存在于window.onload这个函数中
不知道是不是这样 ,请高手指正
应该你是正确的,
点 li 时alert(i) ,结果是3,点button 的结果显示是5
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>11</title>
<script type="text/javascript" >
var i = 5;
window.onload = function() {
var list = document.getElementsByTagName("li");
for (var i = 0; i < list.length; i++) {
list[i].onclick = function() {
alert(i);
// alert(list[i].innerHTML); //为什么改成this就好了?? }
}
};
}
</script>
</head>
<body>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<input type="button" value="geti" onclick="alert(i)" />
</body>
</html>
alert(i);//加上这一句你马上就明白为什么错了
alert(list[i].innerHTML);//为什么改成this就好了??
}js里面for语句没有自己的作用域,你这儿的i值在事件发生时已经被改变,alert一下就明白了
这儿你用的给onclick方法赋值的方式添加事件,方法里面的this指代对象自身,所以不会有问题
window.onload = function(){
var list = document.getElementsByTagName("li");
for(var i = 0; i < list.length; i++){
list[i].onclick = function(){
alert(i);
}
}
}如果这样的话是在同一个作用域,i访问的都是同一个活动变量,所以为3.
为什么this.onclick的话能弹出对应的值呢?
很简单应为 对象.onclick = function(){alert(this)}这里的this就是对象。
http://blog.csdn.net/a569171010 这里面几篇文章可以看一下,很有用的
window.onload = function(){
var list = document.getElementsByTagName("li");
for(var i = 0; i < list.length; i++){
list[i].onclick = function(){
alert(i);
}
}
}如果这样的话是在同一个作用域,i访问的都是同一个活动变量,所以为3.
为什么this.onclick的话能弹出对应的值呢?
很简单应为 对象.onclick = function(){alert(this)}这里的this就是对象。
http://blog.csdn.net/a569171010 这里面几篇文章可以看一下,很有用的