下午没有任务,闲来无事仿个小网页巩固下基础知识。由于公司安全规定,原网页截图不便上传(也没法上传),回家后做了个简单的菜单以图示:

目标:点击某选项时,该选项底边加粗

1.首先定义click方法,然后在点击元素时调用该方法。('curr'类即红框内底边加粗效果)

var liElements = document.getElementsByClassName('headLi');
var addClick = function() {
var currElement = document.getElementsByClassName('curr')[0];
if (this !== currElement) {
currElement.className = currElement.className.replace('curr', '');
this.className = this.className + ' curr';
console.log('this=' + this + 'currElement=' + currElement);
}
}
for (var i = 0; i < liElements.length; i++) {
liElements[i].onclick = function() {
addClick();
}
}

结果:加粗效果消失,第二次点击时控制台报错:

2.在绑定事件时直接写点击事件的方法

var liElements = document.getElementsByClassName('headLi');
for (var i = 0; i < liElements.length; i++) {
liElements[i].onclick = function() {
var currElement = document.getElementsByClassName('curr')[0];
console.log('this=' + this + 'currElement=' + currElement);
if (this !== currElement) {
currElement.className = currElement.className.replace('curr', '');
this.className = this.className + ' curr';
}
}
}

结果:功能正常

根据控制台可以看出,原因就在于this的指向:第一种方法中,this在“无所属对象的函数”中调用,指向了全局对象,第一次点击时,移除了元素的'curr'类,但没法为被点击的元素绑定'curr',于是当第二次点击时,控制台报undefined,无法找到绑定'curr'类的元素。

而第二种方法中,this所在的方法属于liElements[i]对象,于是指向了被点击的元素,一切正常。

关于this的用法可以参考博客:http://www.cnblogs.com/nimojs/p/javascript-this.html

为dom添加点击事件,由此引发this指向的思考的更多相关文章

  1. echart字符云之添加点击事件

    // 路径配置 require.config({ paths : { echarts : 'jquery/echarts-2.2.7/build/dist' } }); // 使用EChart.js画 ...

  2. ECharts问题--散点图中对散点添加点击事件

    1. 我们这次就没有先讲解怎么使用散点图了,这个跟之前的一些图还是很类似的,不会的可以去官网上面查看 API 使用.我们这次讲解的是为散点图中的散点添加点击事件,然后在图表之外的一个 div 里面显示 ...

  3. iOS开发小技巧 - label中的文字添加点击事件

    Label中的文字添加点击事件 GitHub地址:https://github.com/lyb5834/YBAttributeTextTapAction 以前老师讲过类似的功能,自己懒得回头看了,找了 ...

  4. 【Swift 2.1】为 UIView 添加点击事件和点击效果

    前言 UIView 不像 UIButton 加了点击事件就会有点击效果,体验要差不少,这里分别通过自定义和扩展来实现类似 UIButton 的效果. 声明 欢迎转载,但请保留文章原始出处:) 博客园: ...

  5. ThinkPHP框架下,给jq动态添加的标签添加点击事件移除标签

    jq移除标签主要就是$("#要移除的id").remove();不再赘述,这里要提醒的是jq中动态添加标签后怎样添加点击事件.一般的jq添加点击事件是用这种方法$("#i ...

  6. 继承UIView的子控件添加点击事件

    UITapGestureRecognizer*tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:selfaction:@select ...

  7. 如何在UILable上添加点击事件?

    最近开始学习iOS开发,今天上来写第一个iOS笔记 昨天碰到一个需求,在UILable上添加点击事件,网上找了写资料,有人建议用透明的UIButton覆盖,有人建议写一个集成自UILable的类,扩展 ...

  8. jquery无法为动态生成的元素添加点击事件的解决方法

    遇到 jquery无法为动态生成的元素添加点击事件,谷歌一下,整理一下解决方法如下: (<li>中间的元素是动态生成的), 现在想为<i>添加点击事件, 例子如下: <d ...

  9. Qt:添加点击事件的Label并显示图片

    1.给label添加点击事件 Qt中原本的label是没有点击事件的,如果想添加点击事件的话,可以继承QLabel类并重载鼠标事件(比如mousePressedEvent),然后在鼠标事件中发送一个信 ...

随机推荐

  1. Sa yo na ra

    总想记点些什么. 都快忘了当初是为什么来到这里呢... 2014年10月,友人给我介绍了一门编程竞赛ACM,并给我演示了一下A+B.于是我知道了ACM的含义. 2014年12月,开始水入门题. 201 ...

  2. Android 数据存储五种方式

    1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用Shared ...

  3. linux centos 安装mysql

    安装步骤 http://www.cnblogs.com/gaojupeng/p/5727069.html 下面这个报错 主要还是在 题啊加软连接的   命令出了问题 1.启动  报错 mysqld_s ...

  4. MySql 创建表 插入数据!

    create table stu( id int, sname VARCHAR(20), sex VARCHAR(1), birthday DATETIME) insert into stu valu ...

  5. Ajax聊天

    结构: index.html <!DOCTYPE html> <html> <head> <title>index.html</title> ...

  6. mac 安装php7

    卸载php55 brew unlink php55 brew install homebrew/php/php70 安装成功信息 To enable PHP in Apache add the fol ...

  7. CentOS6.3修复模式/单用户模式修改fstab文件

    今天修改LVM逻辑卷的名称时候,忘记更改fstab配置文件了,导致机器重启后找不到盘,进不了系统!立即用光盘进入修复模式进行修复!  1.修复模式操作方法: 用光盘进入Linux修复模式,插入cent ...

  8. 使用Beautifulsoup爬取药智网数据

    使用Beautifulsoup模块爬取药智网数据 Tips:1.爬取多页时,先用一页的做测试,要不然ip容易被封 2.自己常用的处理数据的方法: reg=re.compile('正则表达式') dat ...

  9. Yii读取TXT文件数据插入到数据库

    个人平时会用到的方法,记录一下并分享给需要的朋友,Yii批量添加还需要clone一下model才可以,不然只会插入一条数据. 也可以把文件通过参数的方式调入到方法中. // 读取CVS文件 funct ...

  10. ListView 的使用

    一.ListView:不同视图中一种显示想的集合,显示表格样式的数据信息1.视图:            在其右上方小箭头点击将视图改为Details:或者右键属性在外观View将其改为Details ...