Button中常用的onclick
有些时候某些DOM会执行一些简单的JS函数,并不需要一个script标签中定义函数然后执行,开始使用
1 | <button onclick="alert("message")">Test</button> |
并不会执行,查了一下,这里要使用单引号才行,不知道为什么,可能和HTML解析方式有关
1 | <button onclick='alert("message")'>Test</button> |
由于tr具有点击时间,而超链接也可以被点击,所以就造成用户一次操作执行了两个时间,这是一个典型的事件嵌套问题,解决方法是 由于事件是通过冒泡顺序传递的 只需要在合适的地方阻止冒泡,就可以控制执行的步骤
写三个具有click事件的div进行嵌套
1 | <!DOCTYPE html> |
停止冒泡的函数为 stopPropagation(),需要通过回调函数传入事件event
事件处理过程中,阻止了事件冒泡,但不会阻击默认行为(它就执行了超链接的跳转)
1 | <body> |
事件处理过程中,阻止了事件冒泡,也阻止了默认行为(比如刚才它就没有执行超链接的跳转)
1 | <body> |
事件的回调函数中有一个
1 | event.preventDefault(); |
如果把它放在头部A标签的click事件中,点击“点击我”。
会发现它依次弹出:我是最里层—->我是中间层—->我是最外层 但最后却没有跳转到百度
它的作用是:事件处理过程中,不阻击事件冒泡,但阻击默认行为(它只执行所有弹框,却没有执行超链接跳转)
JS的时间触发器是HTML文本中Windows DOM对象的两个方法,详细链接见JS计时事件
1 | var call = function() { |
如果执行到某个时候想要停止,可以使用 window.clearInterval(timer)
进行停止
在写网页时,有时多个请求可以共用一个回调函数来完成功能,进行了多次研究,整理了一些经验
1 | var statusUtil = { |
最开始的时候使用以上的代码,会报错 TypeError: response is not a function. (In ‘response(response)’, ‘response’ is undefined) 的错误,根据我的文章JS的回调函数中分析的原因
在JS代码中()代表的意思是作为函数执行
在没有意识到这一点的时候,我总觉得传递回调函数的时候应该带着参数,所以会写
**this.response(response)**来传入参数,后来发现报错,就使用返回一个函数的方法折衷获得结果
1 | var statusUtil = { |
此时就可以通过**this.response()**获取到回调函数
由于JS的传递参数过程是一个复制的过程,我们只需要把函数的地址作为参数传入,至于函数本身的参数,并不需要关心,正确的代码
1 | var statusUtil = { |
在查询共用一个回调函数时,还发现JQuery存在一个when…done…函数
1 | var url1 = "/resource/ar/hometab/index_tab_games.json" |
该函数是并发多个Ajax请求,然后等待接收到所有返回后才会触发回调函数,根据别人总结
在Java或者OC中,大家都会使用遍历方法for…in…,一般用于操作List或者NSArray,今天在操作JS的时候遇到了一个坑
1 | var array = new Array() |
该代码打印出来的结果是
1 | 0 |
发现 temp并不是array里的value而是其index 需要修改为
1 | for (var temp in array) { |
之所以会产生这种情况,是因为JS本身的Object结构的问题
1 | var object = { |
Object作为根本对象,其储存方式都是Key-Value键值对的形式,所以说Array这种Object,只不过自动把Key设置成0,1,2…,而JS的for…in…循环,只能遍历Object的key对象,这种性质带与Java等不同的是,JS默认可以对任何类型进行遍历,而不仅仅是List。
1 | var dict = {"key01": 5,"key02": 10, "key03": 20} |
输出
1 | key01 |
甚至对方法名进行遍历
1 | var obj = { |
输出
1 | inVar01 |
在JS的函数传入参数的时候,在函数内部改变参数的值,结果不同
1 | function test() { |
以上代码测试结果为
1 | int: 5 obj: 10 |
为什么呢?
JS中的对象分为两种
其中引用对象中储存的地址既可以是Object对象的地址,也可以是某个函数的地址,所以才能有以下代码
1 | var a = function(){//do}; |
根据JavaScript高级程序设计中68-72页介绍,JS函数的传参实质上是一种拷贝,有点类似于我的文章深拷贝与浅拷贝中的讨论,如果函数**function doTest(param)**存在参数,那么 param 本身是一个var,会对传入的var的内容进行复制
1 | function doIntTest(param) { |
注意在传入回调函数的时候使用的是 someCall 函数名,而不是 someCall() ,在JS中 () 代表作为函数执行的意思,并不是该函数的指针
1 | function test() { |
输出
1 | Enter |
如果使用了刚刚提到的后者会提示错误 TypeError: callback is not a function. (In ‘callback()’, ‘callback’ is undefined)
并且从输出日志可以看到 someCall() 首先作为函数被执行了一次,才进入doWithCallBack
1 | CallBack |
因为回调函数传入的是一个函数名,如果传入一个var或者null,岂不是会报错,影响后续执行?所以说可以进行一次typeof检查来保证代码不错出
1 | (callback && typeof(callback) === "function") && callback(); |
我比较喜欢用Mac自带的中文输入法,也习惯了使用CpasLock锁定英文和汉字,但是IDEA这个做的明显是有BUG,一旦按下了CpasLock就无法小写,这尼玛坑爹,搜索了2天终于找到了一个比较妥当的解决方案
为了更广泛的传播出去,我这里再重复一遍
关键都是这个键盘映射软件,简直是良心啊,不仅小巧轻便,而且看不到任何多余的东西官方网站和GitHub地址,我在访问的时候感觉比较卡,可能需要翻墙,下载完成后
这样的就可以从以往的「中文输入法-英文状态」到「中文输入法-中文状态」之间的切换,变成了「中文输入法」与「英文输入法」之间的切换。
关于使用Seil后CapsLock按键不发光,解决方案里的作者还自己写了个小程序,Github地址,但是我感觉无所谓,而且状态栏会多个图标,不开森。
以前在Xcode的时候都是用VVDocument来进行写注释,到了IntelliJ才知道VVDocument是抄的Java的注释方式。
实现Implement或者Override
实现构造函数或者Getter和Setter
大小写切换
对Class重命名
收起代码Fold
打开最近文件
高级检索
快速打开文件
选中代码(IntelliJ的下触摸板选中代码实在是难用)
实现Serializable协议时自动生成ID
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true