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

使用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. Loadrunder场景设计篇——添加windows Resource计数器和指标说明

    目的 监控要测试的windows服务器的资源使用情况 A.添加计数器步骤 1.添加视图,方法双击.拖动左侧的Windows Rescources到右边图形区,或右键右侧已有视图,Open a New ...

  2. 深入理解 Java 内存模型(一)- 内存模型介绍

    深入理解 Java 内存模型(一)- 内存模型介绍 深入理解 Java 内存模型(二)- happens-before 规则 深入理解 Java 内存模型(三)- volatile 语义 深入理解 J ...

  3. suse zypper 添加源

    一.查看源和仓库 1.查看repos (软件仓库) zypper lr 2.查看services(软件源) zypper ls 二.删除源和仓库 1.删除软件仓库 zypper rr name 2.删 ...

  4. Hadoop学习之路(二十四)YARN的资源调度

    YARN 1.1.YARN 概述 YARN(Yet Another Resource Negotiator) YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操 作系 ...

  5. Java缓存学习之六:Spring单独使用EhCache

      通过在Application Context中配置EhCacheManagerFactoryBean和EhCacheFactoryBean,我们就可以把对应的EhCache的CacheManage ...

  6. python选择排序算法总结

    选择排序算法: a=[6,5,4,3,2,1] 算法思路: 第一步:在列表的第一个位置存放此队列的最小值 声明一个变量min_index等于列表的第一个坐标值0 从第一个位置0坐标开始,和它后边所有的 ...

  7. Linux基础命令---zcat

    zcat 解压有gzip压缩的文件,将解压结果送到标准输出. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法       z ...

  8. Windows10 64位下安装TensorFlow谷歌人工智能系统已官方原生支持

    Windows10 64位下安装TensorFlow谷歌人工智能系统已官方原生支持 GitHub - tensorflow/tensorflow: Computation using data flo ...

  9. PowerDesigner逆向操作(从mysql5.0生成数据库的物理模型),把Comment写到name中,pdm文件导出为word

    PowerDesigner逆向操作(从mysql5.0生成数据库的物理模型) 环境:powderdesigner12.5:mysql5.0步骤:1. 为指定的数据库配置mysql的ODBC数据源先下载 ...

  10. 01: requests模块

    目录: 1.1 requests模块简介 1.2 使用requests模块发送get请求 1.3 使用requests模块发送post请求 1.4 requests.request()参数介绍 1.1 ...