通常用于在网站上表示和传输数据

使用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个方面:

  1. url
  2. type
  3. data  , get就不需要了。
  4. 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()的更多相关文章

  1. 理解js事件冒泡事件委托事件捕获

    js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <di ...

  2. vue.js之过滤器,自定义指令,自定义键盘信息以及监听数据变化

    一.监听数据变化 1.监听数据变化有两种,深度和浅度,形式如下: vm.$watch(name,fnCb); //浅度 vm.$watch(name,fnCb,{deep:true}); //深度监视 ...

  3. js原生子级元素阻止父级元素冒泡事件

    <html> <head> <style type="text/css"> #hide{ width:75%;height:80px;backg ...

  4. js实现F5键刷新后菜单保持之前状态以及监听F5页面刷新子iframe 而父页面不刷新

    利用layui实现菜单效果时,刷新页面仍回到首页状态,需要 实现iframe子页面刷新父元素不刷新,下面是代码 //刷新时禁用F5的默认事件 $(document).keydown(function ...

  5. vue.js 跳转同一页面,传不同值,组件监听路由

    watch: { '$route' () { this.type = this.$route.params.type this.loadData() } },

  6. js --- 事件冒泡 事件捕获

    先上结论: 他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事 ...

  7. Vue.js 相关知识(基础)

    1. Vue.js 介绍 Vue,读音 /vjuː/,类似于 view),是一套用于构建用户界面的渐进式框架(重点在于视图层). 作者:尤雨溪 注:学习 vue.js 时,一定要抛弃 jQuery 的 ...

  8. listener监听器的相关知识

    从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...

  9. Linux Epoll相关知识

    其实在Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及 ...

随机推荐

  1. selenium3启动浏览器

    selenium3比2更加标准化,支持的浏览器更多,启动浏览器需要做如下操作: 首先,下载对应浏览器的驱动,并放在项目下(也可以放在其他地方,写代码的时候路径填写正确即可),如下图所示: 下面就是启动 ...

  2. linux常用命令:find 命令之 exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...

  3. python之路----进程(一)

    一.理论知识1.操作系统发展简介 1.没有操作系统 —— 穿孔卡片 2.批处理系统 —— 串行 ,速度块 联机批处理 读磁带的时候速度快 脱机批处理 读磁带和cpu工作并发 3.多道程序系统 —— 并 ...

  4. python进程编程

    多进程multiprocess模块 multiprocessing is a package that supports spawning processes using an API similar ...

  5. Web安全学习笔记之DES算法实例详解

    转自http://www.hankcs.com/security/des-algorithm-illustrated.html 译自J. Orlin Grabbe的名作<DES Algorith ...

  6. Python Web学习笔记之WebSocket 通信过程与实现

    一.什么是 WebSocket ? WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输.但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现. 以前客户端想知道服务 ...

  7. windwos::mutex

    线程同步的方式和机制 临界区.互斥区.事件.信号量四种方式 临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别 1.临界区:通过对 ...

  8. java replaceAll之$替换

    最近,在开发一个伪代码翻译工具的过程中,遇到个问题,我们在伪代码中使用spring EL的规则,将非变量限定在${"1"}中,解析后根据上下文的类型转换为相应的java类型.在规则 ...

  9. CmsEasy 5.5 cut_image 代码执行漏洞

    3 CmsEasy 5.5 cut_image 代码执行漏洞 3.1 摘要 3.1.1 漏洞介绍 CmsEasy是一款基于PHP+MySQL架构的网站内容管理系统,可面向大中型站点提供重量级网站建设解 ...

  10. 20145322 Exp5 MS11_050

    20145322 Exp5 MS11_050 实验过程 msfconsole命令进入控制台 使用命令search ms11_050查看针对MS11_050漏洞的攻击模块 使用命令 use exploi ...