Javascript事件处理历史记录

时间:2013-02-18 08:00:43

标签: javascript jquery html dom

虽然我确实理解Javascript事件处理的各个部分,但我想了解其背后的完整历史,例如事件处理是如何实际实现的(可能在标记中使用它,如<a onClick="callFunc()">

以后它如何更新到其他东西,比如从JS(不显眼的JS)调用它

现在如何使用jQuery实现它?

我只是想了解每个阶段的优势以及事件冒泡/捕获等等

2 个答案:

答案 0 :(得分:4)

嗯,没有多少。或者,真的,任何事情都发生在很久以前。

只要CSS有,

.addEventListener就已存在。 这就是DOM-Level2和我们在一起的时间(约13年,我认为)。

这不是JS如何变得更先进的问题,而是一个JS-writer 没有 的问题。

程序员我知道,谁将JS编写为“二级”或“三级”角色 STILL 使用内联处理程序。 这是十多年以来,这是一个特别好的主意。

至于“不显眼”,这并不一定与事件听众直接相关 如果您打算以任何方式与用户互动,但更多的是分离关注点的问题,我们不再像<p><font color=red>red text</font></p>那样设置元素。

也许是DOM-0事件处理程序(如button.onclick = function () {})长期存在并且仍然经常使用的部分原因是因为微软的attachEvent和W3C的addEventListener

如果你想在IE6-8中支持跨浏览器事件,你要么使用jQuery(或其他库),要么手动编写事件管理功能,以支持IE .attachEvent和其他人.addEventListener,或者您直接使用事件属性(.onclick = function () {})。它们的好处是得到了当今使用的几乎所有浏览器的支持 它们不利于只有一个可分配的功能(如果你需要添加更多的功能,会导致丑陋的处理):

(function () {
    var button = document.getElementById("button"),
        old_func = button.onclick;

    button.onclick = function (e) {
        e = e || window.event;
        doStuff();
        if (old_func) { old_func(); }
    }
}());

...现在想象8个不同的程序员将侦听器添加到同一个按钮。

至于冒泡与捕捉...... 这绝不是真正的战斗(后网景) 微软支持泡沫,W3C支持两者。没有人真正使用捕获来做任何事情,因为很少有人想要在事件发生之前知道事件,并且在目标之前甚至知道它正在发生(并且因为使用捕获的唯一方法是使用addEventListener,这意味着您的活动无法在IE上运行...)

jQuery带来的不是“新”事件或“更好”事件 - 它所做的是允许每个人编写跨浏览器事件。
许多AJAX库都将此作为主要目标:规范化addEventListenerattachEvent之间的差异(这是jQuery之前解决的问题),以及XMLHttpRequest和{{之间的差异1}},(再次,解决了pre-jQuery)。

jQuery刚刚受到人们的喜爱,而且Resig已经用它做了一些很好的事情(虽然jQuery用户已经用它做了一些可怕的事情,迫使Resig和朋友成为超人类,以防止白痴的DOM遍历和事件授权和其他事项。

在过去的大约6年中,我们中的一些人在事件授权等方面做得更好,因为像道格拉斯·克罗克福德和尼古拉斯·扎卡斯这样的人掌握了社会领域的统治,写好书和专业的谈话,高性能的JS。

在过去的几年里,越来越多的人进入了其他语言中看到的企业用途的设计模式。

承诺/延期/期货(ActiveXObject("MSXML2.XMLHTTP.6.0") / $.Deferred)之类的东西是JS工程的未来,当谈到网络应用程序的客户端异步编程时。

这并不是说它看起来像现在这样100%,但是可以说保持DOM事件是一个解决的问题 - 让它们与可能发生的所有异步内容保持一致任何时候,在页面上的任何小部件中...
......这就是Promise派上用场的地方。

然后你有主持人/观察员来保持模块间通信安全和分离 这些可能是“自定义事件”,或者可能是“发射器”......或“发布者/订阅者” 你可以倾听并采取行动的事情 它们可能由实际的浏览器事件触发,或者可能在代码中触发。

同样,jQuery并没有发明或完善它,但是你在jQuery中订阅的任何事件都是在幕后做这些事情之一。

$.when相同 - 它不是真正使用DOM事件,而是传递Promises,您可以订阅。它使用的唯一DOM事件是实际从服务器检索数据的事件。在那之后,这都是定制的。

在过去几年中,我们在JS可以做什么,以及我们如何处理交互和异步性方面取得了巨大的飞跃。

很少有与$.ajax如何变得更好的进展有关,或者jQuery如何帮助我们弥合IE8与其他浏览器之间的差距。

答案 1 :(得分:0)

根据我的理解 1. javascript与html的交互由事件处理。它指示何时在浏览器窗口或文档中发生特定时刻。这些事件可由听众处理。 2.事件冒泡说-event从事件被触发的位置开始,并向上流向文档级别。 即 - div-body-html-document。 例: 1。 这里的事件监听器函数将有一个名为event的本地默认对象。这将说明事件的类型。 2。 这里说的是事件目标元素。

event.preventDefault()方法停止发生元素的默认操作。

分类活动组: 用户交互事件/焦点事件/鼠标事件/轮事件/文本事件/键盘事件。 这些事件将因移动设备而异。