问页面中的一系列事件是属于元素自身所有还是脚本语言

2014-08-03 20:08:19 +08:00
 Front
问题如题。
具体是,假设我使用js为一个元素绑定了一个点击事件。然后我去点击它。这个时候,这个事件是JS的事件还是元素自身的事件?
如果是元素自身的事件,那这些事件是HTML的还是浏览器的?

不知道我的足不足够清楚。不清楚的请见谅。
3266 次点击
所在节点    问与答
37 条回复
Front
2014-08-03 20:11:24 +08:00
补充下:实际上我的疑惑的是,在前端中有很多概念例如:事件,元素我们可以通过onclikc这样去指定它的点击事件,也可以通过JS去为元素绑定点击事件,也可以用JQ。那这个事件的概念到底是HTML的、JS、还是JQ的?
jsonline
2014-08-03 20:11:59 +08:00
是 DOM 的
jsonline
2014-08-03 20:12:30 +08:00
这些东西都是有W3C标准的
Front
2014-08-03 20:15:50 +08:00
@jsonline 也就是说无论是JS、还是JQ也只是去对DOM的事件进行监听,从而做出处理的?
Front
2014-08-03 20:16:27 +08:00
@jsonline W3C标准?不太明白你说得什么意思,能具体描述下么?
tinyhill
2014-08-03 20:21:15 +08:00
有种东西叫 DOM http://www.w3.org/DOM/
ss098
2014-08-03 20:23:43 +08:00
Front
2014-08-03 20:24:49 +08:00
@tinyhill 那是不是说其他的脚本语言是没有独立的事件机制的,最终还是通过DOM对元素进行操作的?
eslizn
2014-08-03 20:36:57 +08:00
@Front 可以自己实现实践事件机制的,例如观察者模式.
eslizn
2014-08-03 20:37:41 +08:00
@Front ps,你可以理解为,万物皆有事件,区别只是这个对象处不处理这个事件
jsonline
2014-08-03 20:53:37 +08:00
1. 这是 DOM Event 的技术文档 http://www.w3.org/TR/DOM-Level-2-Events/events.html
2. 浏览器按照文档给 DOM 实现了 onclick、addEventListener 等 API,所以 JS 可以调用。
3. JS 本身没有事件机制。
4. 你可以实现自己的 JS 事件机制。
5. 不用说「万物皆XX」,因为总有例外。
jsonline
2014-08-03 20:58:32 +08:00
@eslizn JS 不需要设计模式,设计模式是为了弥补语言自身的不足。http://zhi.hu/3Ozy 要学设计模式?去写 Java 吧。
jsonline
2014-08-03 21:02:49 +08:00
有件事楼主没有弄清楚,事件不是 JS 主动绑定的,JS 只是被动地被调用。比如
body.onclick = foo
这句话的意思是
JS 告诉浏览器,如果 body 被点击了,你就调用我的 foo 方法好不好?
onclick 会不会被调用,得看浏览器的「心情」的。
你觉得 JS 在这里面扮演了什么角色呢?
loading
2014-08-03 21:04:31 +08:00
学得这么玄?佩服
jsonline
2014-08-03 21:08:07 +08:00
浏览器在「监听/捕获事件」,
JS 只是在添加「事件处理函数」
jsonline
2014-08-03 21:14:09 +08:00
@eslizn 无意针对你哈,只因我是个Java黑/设计模式黑 :)
Front
2014-08-03 21:29:33 +08:00
@loading 只是学的过程中突然有这么个疑问。
akfish
2014-08-03 21:31:59 +08:00
@jsonline 知乎那个答案完全没喷在点上,说得好像语言/类库实现那些功能没有用到设计模式一样。
喷设计模式的一般也就两类人,一是被滥用设计模式的小白烦得不行的人,一是学不好设计模式而酸葡萄的小白。
真要有人觉得设计模式完全没用就是垃圾,那就呵呵了。

包括那些喷设计模式喷得非常起劲的大牛,你在他的代码里到处都看得到设计模式,因为一个系统要做得好,最后大概就会变成那种模式来(滥用设计模式的人则是完全反过来)。
设计模式本身就是对好的代码实践的总结,主要目的是大家形成一个统一的黑话,交流起来方便。
A:"你这个代码是怎么一回事?"
B:"哦,你看这是observer,那里一个bridge,有个三方库adapter进来的"
没有设计模式的话:
B:"哦,客官你听我慢慢道来,这里大概有30多个类,我从头到尾跟你讲一遍……"
jsonline
2014-08-03 21:36:12 +08:00
@akfish 你让写 C 语言的人怎么跟别人将代码呢……
「设计模式」不是必须的。「常用的 pattern」是必须的。
很显然那帮搞 Java 的中的一些人已经把设计模式这个词给毁了。
akfish
2014-08-03 21:50:16 +08:00
@jsonline 设计模式是一种存在,只要系统规模达到一定程度,必然就会出现某种模式,不管是否人为(即刻意的去用设计模式)。
设计模式的问题从来就是滥用/误用的人,很多人没搞清楚喷点在哪里纯跟风,于是完全就喷错了。

就好比C党在Linus的带领下最喜欢喷C++党,喷到现在就变成不少人张口就来OOP是垃圾,而其实Linus的主要喷点是C++会导致误用/滥用OOP。Linux Kernel,Git等项目的源代码,只要看过的人就知道,不少OOP。

所以现在看到人说xxx是垃圾,各种呵呵。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125924

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX