JS-Object (3) JSON; Event Object相关知识(事件冒泡,事件监听, stopPropagation()
通常用于在网站上表示和传输数据
使用JavaScript处理JSON的所有工作,包括访问JSON对象中的数据项并编写自己的JSON。
JSON text基本上就像是一个JavaScript对象,这句话几乎是正确的。
原因就是,例外见下:
Arrays 也是一个 JSON对象.
其他:
- JSON是纯数据格式,只有属性,没有方法
- JSON要求两边有括号{}/[]
- 不像JavaScript标志符可以用做属性,在JSON中,属性必须是quoted strings。
- JSON格式验证器 : https://jsonlint.com/
我的code pen:
案例:https://codepen.io/chentianwei411/pen/mGadJX
重点:
1。使用XML方式发送请求并处理响应。Rails.ajax({})是用xml写的。
需要4个方面:
- url
- type
- data , get就不需要了。
- dataType, 响应的数据格式。
var request = new XMLHttpRequest();
request.open("GET", requestURL) //type, url
request.responseType = 'json' //dataType
request.send() request.onload = function() { //success函数内把数据插入DOM。
var superHeroes = request.response;
populateHeader(superHeroes); //2个方法createElement,添加textContent, 插入DOM.
showHeroes(superHeroes);
}
2
JSON.parse(): 把收到的字符串转化为javascript对象。
JSON.stringify(): 正相反,把js对象转化为JSON字符串。 Rails用 as_json()/to_json()
var myJSON = { "name" : "Chris", "age" : "38" };
var myString = JSON.stringify(myJSON);
myString =>
"{"name":"Chris","age":"38"}"
知识点:
section article {
width: 33%;
float: left;
}
1. session article {} 选择所有在session中的article类
2. width配合float,横向排列。
学习了一个案例:
我的code pen:
https://codepen.io/chentianwei411/pen/qMvEJK
挑战: 添加一个evil circle 尚未做。
Event Object
所有事件的对象都基于Event Object,
- DragEvent,
- keyboardEvent,
- MouseEvent。
- 等等。
- 还可以自定义event,使用createEvent()方法,内部参数很多。
MouseEvent
有大量的properties 和 methods:
如button就是一个特性,当鼠标事件被激活时,返回鼠标点击的按钮(左/轮/右)。
有多个event type类型:
onclick, onmousedown等等。
事件是对象,也就可以当参数传递
例子,参数e代表了click 事件对象。
click事件对象,继承了Event对象的部分特性和部分方法,因此可以使用如target, type, timeStamp方法。
这里target是Event对象的方法,委托给click事件对象使用。
function bgChange(e) {
var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
e.target.style.backgroundColor = rndCol;
}
btn.addEventListener('click', bgChange);
例子-我的code pen改变颜色:用addEventListener(),和onclick事件。
event.preventDefault()
防止元素的默认事件行为。
- 比如点击表单按钮,可以通过preventDefault()停止提交表单行为,然后自定义。
- 点击一个<a href='https://w3schools.com/'>,停止导向它指向的URL。
capture and bubbling
使用stopPropagation() (点击看code pen案例)
用于停止事件传播event flow, 防止在冒泡或捕捉中,相同的事件被调用。
解释:当元素自身的事件执行后,开始冒泡,或捕捉,这个方法就是在冒泡或捕捉中遇到相同的事件后,停止这个事件的执行。
还有一个变种,stopimmediatePropagation(), 假设元素自身有两个click事件,只会执行第一个,同样有防止在冒泡或捕捉中,相同的事件被调用的功能。
事件委托技巧: 利用事件的冒泡bubble行为。 (点击查看code pen上的案例)
设计:
当<父元素>内有一堆子元素都有相同的event并有相同的运行代码时,可以在<父元素> 上设定addEventListener('一个事件', function(){ ... })监听这个事件。子元素上无需再写任何event代码。
操作:
当用户在子元素上的操作,触发某个event后(自身没有代码可以运行), bubbling,父元素上监听到这个event,执行代码。
Gallary:
一个练习,用到if, for语法, 方法:addEventListener(), setAttribute(), getAttribute()。
css:
postion: relative/absolute
解释: 分别用到父元素和子元素中,子元素的位置根据父元素来变化。
我的code pen:
https://codepen.io/chentianwei411/pen/GXeVjG
JS-Object (3) JSON; Event Object相关知识(事件冒泡,事件监听, stopPropagation()的更多相关文章
- 理解js事件冒泡事件委托事件捕获
js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <di ...
- vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化
一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...
- js原生子级元素阻止父级元素冒泡事件
<html> <head> <style type="text/css"> #hide{ width:75%;height:80px;backg ...
- js实现F5键刷新后菜单保持之前状态以及监听F5页面刷新子iframe 而父页面不刷新
利用layui实现菜单效果时,刷新页面仍回到首页状态,需要 实现iframe子页面刷新父元素不刷新,下面是代码 //刷新时禁用F5的默认事件 $(document).keydown(function ...
- vue.js 跳转同一页面,传不同值,组件监听路由
watch: { '$route' () { this.type = this.$route.params.type this.loadData() } },
- js --- 事件冒泡 事件捕获
先上结论: 他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事 ...
- Vue.js 相关知识(基础)
1. Vue.js 介绍 Vue,读音 /vjuː/,类似于 view),是一套用于构建用户界面的渐进式框架(重点在于视图层). 作者:尤雨溪 注:学习 vue.js 时,一定要抛弃 jQuery 的 ...
- listener监听器的相关知识
从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...
- Linux Epoll相关知识
其实在Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及 ...
随机推荐
- memcache 基础原理
memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速 ...
- CTC(Connectionist Temporal Classification)介绍
CTC解决什么问题 CTC,Connectionist Temporal Classification,用来解决输入序列和输出序列难以一一对应的问题. 举例来说,在语音识别中,我们希望音频中的音素和翻 ...
- Python 在序列上跟踪索引和值
内置的enumerate() 函数可以很好的解决这个问题 >>> my_list = ['a', 'b', 'c'] >>> for idx, val in enu ...
- 好用的firefox浏览器、geckodriver驱动的版本组合(55 和 0.19.1)
试过很多的firefox浏览器版本和geckodriver的组合,有时候好用,有时候不好用,现在确定了一个好用的版本组合,记录一下: firefox:版本55,而且此版本可以用firebug geck ...
- pycharm中内看内建函数的定义
鼠标方法在内建函数上,Ctrl+B,看内建函数的定义 如果想要看内置函数的具体实现细节,可以到python的lib目录下C:\Python27\Lib\,或者python的官网上 如果要看非内建的函数 ...
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- Linux 中的 grep 命令
一,grep命令有什么用 个人觉得grep命令就是一个对文本或输出进行匹配并控制输出的一个工具,看一下下面的参数,部分翻译了,有不对的地方,还请指正: grep --help 匹配模式选择: -E, ...
- phpMyAdmin本地文件包含漏洞
4 phpMyAdmin本地文件包含漏洞 4.1 摘要 4.1.1 漏洞简介 phpMyAdmin是一个web端通用MySQL管理工具,上述版本在/libraries/gis/pma_gis_fact ...
- Spark样本类与模式匹配
一.前言 样本类(case class)与模式匹配(pattern matching)是Scala中一个比较复杂的概念,往往让人感觉深陷泥沼.我在这里对Scala中的样本类与模式匹配进行了一些整理,希 ...
- Go第十一篇之编译与工具
Go 语言的工具链非常丰富,从获取源码.编译.文档.测试.性能分析,到源码格式化.源码提示.重构工具等应有尽有. 在 Go 语言中可以使用测试框架编写单元测试,使用统一的命令行即可测试及输出测试报告的 ...