`
dowhathowtodo
  • 浏览: 780341 次
文章分类
社区版块
存档分类
最新评论

{{JS}}事件句柄

 
阅读更多
1.作为HTML属性的事件句柄
事件句柄被设置为js代码(在原始事件模型中),作为HTML的属性值。

2.事件句柄的返回值
在多数情况下,事件句柄(无论是HTML属性设置的,还是JS属性设置的)都使用它的返回值说明事件的处理方法。通常若浏览器执行了某种默认动作来响应一个事件,那么可以返回false阻止浏览器执行那个动作。通过返回false阻止执行默认动作的事件句柄包括onsubmit,onclick,onkeydown,onkeypress,onmousedown,onmouseup,onreset。
注:关于返回false的规则有一个例外,即当用户把鼠标移到一个超链接或图像上时,浏览器的默认动作是在状态样上显示链接的URL。要阻止这种情况发生可以让onmouseover事件句柄返回false。如下
<a href="help.html" onmouseover="window.status='Help!';return true;">Help</a>
这个例外的产生是没有任何原因的.大多数浏览器认为隐藏链接的目标的能力是一个安全漏洞,并且关闭了这一功能。

3.事件句柄和this关键字
无论是用HTML属性定义事件句柄,还是用JS属性定义事件句柄,都是把一个函数赋予文档元素的一个属性。即是在定义文档元素的一个新方法。在事件句柄被调用时,它是作为产生事件的元素的方法调用的,故this关键字引用了那个目标元素。

4.事件句柄的作用域
在把一个HTML属性的值设置为JS字符串,以便定义事件句柄时,隐式地定义一个函数。以这种方式定义的事件处理函数的作用域与常规方法定义的全局函数不同。这意味着定义为HTML属性的事件句柄,它所执行的作用域和其它函数的作用域不同。
定义为HTML属性的事件句柄具有复杂的作用域链。它们的作用域链的头是调用对象(call object),但是事件句柄的作用域中的下一个对象却并不是全局对象,而是触发事件句柄的对象。如假定使用<input>标记在HTML表单中定义了一个Button对象,然后使用onclick属性定义了一个事件句柄。如果该事件句柄的代码使用了一个名为form的变量,那么该变量就会被解析为Button对象的form属性。

理解事件句柄的扩展的作用域的另一种方式是,考虑把HTML事件句柄属性的JS文本翻译成一个JS函数,如下
<input id="b3" type="button" value="3" onclick="alert(b4.value);" />
对等的JS代码可能如下所示:
var b3 = document.getElementById("b3");
b3.onclick = function() {
with(document) {
with(this.form) {
with(this) {
alert(b4.value);
}
}
}
}
重复的with语句创建了一个扩展的作用域链。

事件句柄的作用域中有目标对象非常方便,但包括其它文档元素的扩展作用域却非常麻烦。例如,Window对象和Document对象都定义了名为open()的方法。如果没有限定条件,只用标识符open,那么引用的几乎总是window.open()方法。但在定义为HTML属性的事件句柄中,Document对象在作用域中先于Window对象,所以用open引用的是document.open()方法;同样,若给一个Form对象添加一个名为window的属性或name="window"定义的一个输入元素,则在事件句柄中调用window会指向该属性或name="window"的输入元素,而不是全局的Window对象。

所以在定义作为HTML属性的事件句柄时,一定要小心。最安全的方法是,使这种句柄尽量简单。理想的方法是,让它们只调用在别的地方定义的全局函数,尽量避免长作用域链带来的麻烦。

最后,请记住,关于事件句柄作用域的完整讨论只适用于定义为HTML属性的事性句柄。如果把一个函数赋予适当的JS事件句柄属性来设置事件句柄,那么根本不涉及特殊的作用域链,函数在定义它的作用域中执行。


注:分享Ubuntu下iBus中五笔输入法切换中英文符号的快捷键:Ctrl+.

分享到:
评论

相关推荐

    用JavaScript的事件句柄功能及表单元素创建交互式电话号码簿.pdf

    用JavaScript的事件句柄功能及表单元素创建交互式电话号码簿

    JavaScript为事件句柄绑定监听函数实例详解

    本文实例讲述了JavaScript为事件句柄绑定监听函数的方法。分享给大家供大家参考,具体如下: 在JavaScript中为Dom元素绑定事件监听函数是一件非常常见的事情,但这里也有许多的Bug。各种浏览器对于事件绑定都提供了...

    JavaScript实现为事件句柄绑定监听函数的方法分析

    本文实例讲述了JavaScript实现为事件句柄绑定监听函数的方法。分享给大家供大家参考,具体如下: 在JavaScript中为Dom元素绑定事件监听函数是一件非常常见的事情,但这里也有许多的Bug。各种浏览器对于事件绑定都...

    JS里各种宽度和高度的句柄

    JS里各种宽度和高度的句柄,以图片的形式展示js里的各种尺寸的句柄,包你满意

    Web前端开发基础:使用JavaScript实现验证效果.ppt

    2 教学内容 1 单元目标 3 动手实践 4 课堂小结 教学内容 事件的含义 JavaScript事件处理 JavaScript表单事件 JavaScript鼠标事件 JavaScript键盘和窗口事件 综合应用 事件是一些可以通过脚本响应的页面动作。...

    javascript获取窗口属性值

    JS获取窗口属性值 JS获取窗口属性值 JS获取窗口属性值

    js(javascript)编写的计算器

    用javascript编写的一个计算器 实现行为与结构的分离,页面的XHTML文件中不出现事件响应句柄(即onclick等),全部计算在JavaScript文件(.js)中完成

    简单js网页弹窗按钮,一行代码实现

    S是一门事件驱动型的编程语言,依靠事件去驱动,然后执行对应的...在JS中有很多事件,其中有一个事件叫做:鼠标单击,单词:click。并且任何事件都会对应一个事件句柄叫做:onclick。而事件句柄是以HTML标签的属性存在的。

    【JavaScript源代码】ECharts鼠标事件的处理方法详解.docx

     响应某个事件的函数称为事件处理程序,也可称为事件处理函数、事件句柄。鼠标事件即鼠标操作点击图表的图形(如click、dblclick、contextmenu)或hover图表的图形(如mouseover、mouseout、mousemove)时触发的...

    在页面路由中实现文件句柄传递,可以完成在另一个页面实现文件内容添加

    在vue开发时需要在页面跳转的时候传递文件句柄,又不想用vuex来传递,因为vuex使用有些大材小用,说以用mitt,也就是vue2的eventbus。vue3没有eventbus,所以使用mitt,来传递文件句柄,在另一个页面就可以拿到文件...

    JavaScript HTML DOM EventListener

    addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。 你可以向一个元素添加多个事件句柄。 你可以向同个元素添加多个同类型的事件句柄,如:两个 “click” 事件。 你可以向任何

    JavaScript语言参考手册

    这一章包含了在 JavaScript客户端用于激发某些特定动作的事件对象和事件句柄。另外,本章还包括了关于使用事件和事件句柄的常规信息。 关于事件常规信息 定义事件句柄 Navigator 4.0 中的事件 event onAbort onBlur ...

    JavaScript对HTML DOM使用EventListener进行操作

    addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。 你可以向一个元素添加多个事件句柄。 你可以向同个元素添加多个同类型的事件句柄,如:两个 “click” 事件。 你可以向任何 DOM 对象添加事件监听...

    JavaScript中文参考手册

    这一章包含了在 JavaScript客户端用于激发某些特定动作的事件对象和事件句柄。另外,本章还包括了关于使用事件和事件句柄的常规信息。 关于事件常规信息 定义事件句柄 Navigator 4.0 中的事件 onSubmit onUnload...

    js HTML DOM EventListener功能与用法实例分析

    本文实例讲述了js HTML DOM EventListener...addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。 可以向一个元素添加多个事件句柄。 [removed] var x = document.getElementById("myBtn"); x.addEven

    JavaScript核心技术 PDF扫描版

    6.22级DOM上的事件句柄 6.3产生事件 6.4习题 第7章表单与即时验证 7.1访问表单 7.2把事件附加在表单上:不同的方法 7.3选择列表 7.4单选按钮和复选框 7.5输入字段和JiT正则表达式 7.6习题 第8章沙箱及之上的cookie、...

    用纯CSS实现禁止鼠标点击事件示例代码

    JavaScript有一个preventDefault方法, 他可用以来取消事件的默认动作。比如取消打开链接,选择文本或拖放等。 复制代码代码如下:event.preventDefault() 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果...

    浅谈JavaScript事件的属性列表

    HTML 4.0 的新特性之一是能够使 HTML 事件触发浏览器中的行为,比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,可将之插入 HTML 标签以定义事件的行为。   属性 此事件发生在何时… ...

Global site tag (gtag.js) - Google Analytics