js this详解,事件的三种绑定方式
this,当前触发事件的标签
在绑定事件中的三种用法:
a. 直接HTML中的标签里绑定 onclick="fun1()";
b. 先获取Dom对象,然后利用dom对象在js里绑定;
document.getElementById('xx').onclick
document.getElementById('xx').onfocus
c. w3c 规定中的addElementListener
a. 第一种绑定方式 dom 0
<input id='i1' type='button' onclick='ClickOn(this)'>
function ClickOn(self){
self.style.width="200px";
// self 当前点击的标签
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.hide{
display: none;
}
.item .header{
background-color: #2459a2;
color: white;
height: 35px;
line-height:35px;
}
</style>
</head>
<body>
<div style="height: 48px;"></div>
<div id="i1" style="width: 300px;">
<div class="item">
<div onclick="menu(this)" class="header">菜单1</div>
<div class="content hide">
<div>内容1</div>
<div>内容2</div>
<div>内容3</div>
</div>
</div>
<div class="item">
<div onclick="menu(this)" class="header">菜单2</div>
<div class="content hide">
<div>内容1</div>
<div>内容2</div>
<div>内容3</div>
</div>
</div>
<div class="item">
<div onclick="menu(this)" class="header">菜单3</div>
<div class="content hide">
<div>内容1</div>
<div>内容2</div>
<div>内容3</div>
</div>
</div>
</div>
<script type="application/javascript">
function menu(nid) {
var tag = nid.parentElement;
console.log(tag.parentElement.parentElement);
for (var i=0;i<tag.parentElement.children.length;i++) {
tag.parentElement.children[i].children[1].classList.add('hide');
}
tag.children[1].classList.remove('hide');
} </script>
</body>
</html>
b. 第二种绑定方式 dom 1
<input id='i1' type='button' >
document.getElementById('i1').onclick = function(){
this.style.width="200px";
// this 代指当前点击的标签
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.hide{
display: none;
}
.item .header{
background-color: #2459a2;
color: white;
height: 35px;
line-height:35px;
}
</style>
</head>
<body>
<div style="height: 48px;"></div>
<div id="i1" style="width: 300px;">
<div class="item">
<div class="header">菜单1</div>
<div class="content hide">
<div>内容1</div>
<div>内容2</div>
<div>内容3</div>
</div>
</div>
<div class="item">
<div class="header">菜单2</div>
<div class="content hide">
<div>内容1</div>
<div>内容2</div>
<div>内容3</div>
</div>
</div>
<div class="item">
<div class="header">菜单3</div>
<div class="content hide">
<div>内容1</div>
<div>内容2</div>
<div>内容3</div>
</div>
</div>
</div>
<script type="application/javascript">
var tag = document.getElementById('i1');
for (var i=0;i<tag.children.length;i++){
tag.children[i].onclick = function () {
for(var i=0;i<tag.children.length;i++){
tag.children[i].children[1].classList.add('hide');
}
this.children[1].classList.remove('hide');
}
}
</script>
</body>
</html>
c. 第三种绑定方式 dom 2
obj.addElementListener("事件","匿名函数",true/false); true/false可以省略,默认是false冒泡模式,true为捕捉模式,他们的作用是当有一个事件可以有多个标签响应时,响应的顺序
false 先从最内侧的子标签响应,true则刚发相反。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#main {
background-color: red;
width: 300px;
height: 400px;
}
#content {
background-color: deeppink;
width: 150px;
height: 200px;
}
</style>
</head>
<body>
<div id="main">
<div id="content"></div>
</div>
<script>
var mymain = document.getElementById('main');
var mycontent = document.getElementById('content');
//mymain.addEventListener("click",function(){console.log('main1')});
//mymain.addEventListener("click",function(){console.log('main2')}); //可以同时执行多个函数
mymain.addEventListener("click",function(){console.log('main')},true);
mycontent.addEventListener("click",function(){console.log('content')},true);
</script>
</body>
</html>
js this详解,事件的三种绑定方式的更多相关文章
- Dom事件的三种绑定方式
1.事件 2. onclick, onblur, onfocus, 需求:请写出一个行为,样式,结构,相分离的页面. JS, CSS, HTML, 示例1,行为结构样式粘到一起的页面: & ...
- v-bind绑定属性样式——class的三种绑定方式
1.布尔值的绑定方式 <div id="demo"> <span v-bind:class="{‘class-a‘:isA ,‘class-b‘:isB ...
- 手把手教你实现三种绑定方式(call、apply、bind)
关于绑定首先要说下this的指向问题. 我们都知道: 函数调用时this指向window 对象调用函数时this指向对象本身 看下面得例子: // 1 function test(){ const n ...
- js&jquery:添加事件的三种方法和常用的一些事件
一.添加事件的方法 1.EventTarget.addEventListener添加 获取事件目标元素,通过addEventListener函数添加 // Assuming myButton is a ...
- python selenium 三种等待方式详解[转]
python selenium 三种等待方式详解 引言: 当你觉得你的定位没有问题,但是却直接报了元素不可见,那你就可以考虑是不是因为程序运行太快或者页面加载太慢造成了元素不可见,那就必须要加等待 ...
- C++的三种继承方式详解以及区别
目录 目录 C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 前言 我发 ...
- EF三种编程方式图文详解
Entity Framework4.1之前EF支持“Database First”和“Model First”编程方式,从EF4.1开始EF开始支持支持“Code First”编程方式,今天简单看一下 ...
- js 动态加载事件的几种方法总结
本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
随机推荐
- 2.32 js几种定位方法总结
2.32 js几种定位方法总结 前言本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一.以下总结了5种js定位的方法除了id是定位到的是单个element元素对象, ...
- ejs-模板
我今天第一次使用,使用的时候,遇到一些问题,还好有朋友帮我一起解决; 我先说说我使用过程中遇到的问题; 在express框架中引用 app.set('views',__dirname + '/view ...
- Python学习笔记第十七周
目录: 一.jQuery 内容: 一.jQuery: ps:版本 1.xx (推荐最新版本,兼容性好) 2.xx 3.xx 转换: jQuery对象[0] => DOM对象 $(DOM对象 ...
- Nginx反向代理与Backend直接配置长连接
使用了Nginx的反向代理配置如下: upstream test{ keepalive 1; server 192.168.1.63:4000; } server { listen 4000; ser ...
- JAVA 第四章 数组
数组保存的是一组有顺序的.具有相同类型的数据. 1.创建: 数组的声明格式: int arrary[]; int [] array1, array2; //同时声明多个数组. 上面的语句只是对数组进行 ...
- djang 过滤器和装饰器
Django自定义过滤器 Django 自定义过滤器, 在项目目录中建立templatetags目录. 建立my_filter.py 文件, 导入模板模块 :from django import te ...
- PAT-L2-007 家庭房产 (union-find) 小数据 没有什么是暴力解决不了的!!
题目分析: 典型的union-find 算法 想法: 先不着急 union 因为每一个人的房产信息不知道 所以先输入所有信息 同时保留与自己有关系的每一个人 待初始化每一个人的房产信息后,再union ...
- webapi core2.1 IdentityServer4.EntityFramework Core进行配置和操作数据
https://identityserver4.readthedocs.io/en/release/quickstarts/8_entity_framework.html 此连接的实践 vscode ...
- 《DSP using MATLAB》Problem 6.21
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- UBUNTU 安装教程
玩过linux,只是博主觉得现在的很多服务器都是linux系统的,而自己属于那种前端也搞,后台也搞,对框架搭建也感兴趣,但是很多生产上的框架和工具都是安装在服务器上的,而且有不少大公司都要求熟悉在li ...