【JS/读书随笔】JavaScript编程精解/Eloquent JavaScript:Chapter 11 浏览器事件

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx 政府科技管理者如何提升科技成果转化项目进场交易的备案效率? 立即下载

在浏览器中,每个事件都会创建一个事件对象,事件句柄可以查看这些对象。在浏览器里,javascript 是单线程的。

DOM 树“冒泡”:没有被处理的事件可以通过 DOM 树进行“冒泡”。如果单击一个段落中的链接,任何与链接相关的事件句柄会被首先调用。如果没有事件句柄,或者这些句柄没有表明已经处理完事件,段落(链接的父节点)上的事件句柄就会被触发。然后段落的父节点的事件句柄也会被触发。最后,如果没有处理该事件的 javascript 事件句柄,浏览器会自己对其进行处理。

兼容性:在几乎所有浏览器都基本支持同样功能的事件时,IE 浏览器针对此功能却有完全不同的接口。

处理事件常用操作:

1)注册事件处理句柄(事件处理函数);
2)获得事件对象(e.g. event 对象);
3)从事件对象里提取信息(e.g. event.mouseover);
4)标记事件已经处理了;

详细地讲,1)的方法是设置一个节点的属性对应到事件名称上,例如 onclick 或 onkeypress 。这个方法在不同浏览器上都是有效的,但是它有一个重要缺陷:只能给该元素附加一个事件句柄。还有其他不限制添加事件句柄数量的方法。(假设 button 变量持有一个按钮的 DOM 节点):
IE 浏览器中
button.attachEvent("onclick", function(){alert("Click!");});
其他浏览器中
button.addEventListener("click", function(){print("Click!");}, false);
注意,这里第一个参数 on 是去掉的。第三个参数 addEventListener 是 false,表示事件应该像平常一样通过 DOM 树进行“冒泡”。true 可以使该事件句柄优先级高于其他事件句柄,但是 IE 中不支持,所以很少用到。

function registerEventHandler(node, event, handler){
    if(typeof node.addEventListener(event, handler, false);
    else
        node.attachEvent("on" + event, handler);
}

上面的函数可以查看浏览器支持的是 IE 模型或是其他浏览器模型,并查看能否正常运行。
删除事件句柄的方式和添加句柄几乎一样,不过使用的是 detachEvent 方法和 removeEventListener 方法。

function unregisterEventHandler(node, event, handler){
    if(typeof node.removeEventListener == "function")
        node.removeEventListener(node, handler, false);
    else
        node.detachEvent("on" + event, handler);
}

事件对象正规化代码片:

function normalizeEvent(event){
    if(!event.stopPropagation){
        event.stopPropagation = function(){this.cancelBubble = true;};
        event.preventDefault = function(){this.returnValue} = false;};
}
    if(!event.stop)
        event.stop = function(){
            this.stopPropagation();
            this.preventDefault();
            };

    if(event.srcElement && !event.target)
        event.target = event.srcElement;
    if((event.toElement || event.fromElement) && !event.relatedTarget)
        event.relatedTarget = event.toElement || event.fromElement;
    if(event.clientX != undefined && event.pageX == undefined){
        event.pageX = event.clientX + document.body.scrollLeft;
        event.pageY = event.clientY + document.body.scrollTop;
    }
    if(event.type == "keypress")    
        event.character = String.fromCharCode(event.charCode || event.keyCode);
    return event;

该函数遍历了之前讨论的所有事件对象属性,并确保每个属性都可以在标准的名称下找到。利用这个函数,给 registerEventHandler 和 unregisterEventHandler 编写更方便的包装:

function addHandler(node, type, handler){
    function wrapHandler(event){
        handler(normalizeEvent(event || window.event));
    }
    registerEventHandler(node, type, wrapHandler);
    return{node:node, type:type, handler:wrapHandler};
}

function removeHandler(object){
    unregisterEventHandler(object.node, object.type, object.handler);
}

addHandler 用法,下例为一个文本自动添加一个事件句柄来防止用户输入字母 Q :

var blockQ = addHandler(textfield, "keypress", function(event){
    if(event.character.toLowerCase = "q")
        event.stop();
});

removeHandler(blockQ);

下例中文本输入框有焦点的时候,会将一个输入框的背景编程黄色:

addHandler(textfield, "focus", function(event){
    event.target.style.backgroundColor = "yellow";
});
addHandler(textfield, "blur", function(event){
    event.target.style.backgroundColor = "";
});
山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md 【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。 立即下载

相关推荐

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

JS高程 -- chapter11( DOM扩展 )

选择符API 核心是 querySelector()、querySelectorAll() 两个方法,可以使用 Document 和 Element 类型元素调用( IE8+ )   querySelector: 接收一个 CSS 选择符,返回与选择符匹配的第一个元素,若未找到则返回 null,如果选择符不被支持则抛出错误 例: document.querySelector("#ap...

lp1996817的博客 160

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

【算法】几种常用排序算法

1. 冒泡排序(Bubble Sort) 冒泡排序算法需要遍历几次数组,在每次遍历中,比较 连续相邻 的元素。如果某一对元素是降序,则互换它们的位置;否则,保持不变。冒泡排序法需要遍历 n-1 次数组,每次遍历最佳情况是不用交换,则时间复杂度为 O(n) ,最差情况是每次都要交换,对于第 k 个要交换 n-1-k 次,此时时间复杂度是 O(n^2) Trick:如果在某次遍历中没有发生交换,说

不会飞的超人先生的博客 2964

光伏板太阳能板尘土灰尘脏污检测数据集VOC+YOLO格式1006张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

【剑指OFFER-二刷】

剑指offer二刷

不会飞的超人先生的博客 1382

Oracle21C Windows安装全攻略:从下载到配置环境变量,避开ORA-12514的坑

本文详细介绍了Oracle21C在Windows系统上的安装全流程,包括环境准备、安装包验证、分步安装指南、数据库实例创建与配置、环境变量精准配置等关键步骤,特别针对常见的ORA-12514错误提供了解决方案,帮助用户顺利完成安装并避免常见问题。

ooo22的博客 415

【刷题笔记/剑指Offer】41-50

41. 翻转单词顺序列 42. 左旋转字符串 43. 扑克牌顺子 44. 数m 45. 求1+2+3+......+n 46. 不用加减乘除做加法 47. 把字符串转换成整数 48. 数组中重复的数字 49. 构建成绩数组 50. 正则表达式匹配

不会飞的超人先生的博客 884

记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL

【代码】记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL。

m0_74824002的博客 844

单细胞分析实战:用R语言绘制带连线的堆叠柱状图(附完整代码)

本文详细介绍了如何使用R语言绘制带连线的堆叠柱状图进行单细胞转录组数据分析,特别适用于展示细胞比例变化趋势。通过完整代码示例和实战技巧,帮助研究者优化多组别比较的可视化效果,提升科研图表质量。

yhn4567890的博客 390

【JS/读书随笔】JavaScript编程精解/Eloquent JavaScript:Chapter 4 错误处理

一、 问题类型编写程序是,遇到问题情境大致可以分成:程序员错误和运行时错误。如果程序员忘记给函数传入一个必须的参数,就是程序员错误;如果程序要求用户输入名字但返回的确实空字符串,这就是程序员无法控制的错误,即运行时错误。二、 处理错误异常处理:当函数由于某种原因不能正常返回时,要立即停止现在的操作,然后跳转到能够处理问题的位置。这就是异常处理。 异常处理工作原理:代码可以引发(抛出)异常,该异常是

不会飞的超人先生的博客 803

软件需求规格说明书(SRS)深入解析

摘要: SRS(软件需求规格说明书)是定义系统功能、性能与接口的核心文档,为开发、测试、项目管理提供依据。标准结构包括引言、总体描述、功能/非功能需求、接口等模块。撰写需确保清晰、可验证、无歧义,避免模糊术语。示例展示学生注册模块的需求写法,强调性能与安全性要求。推荐使用Confluence、StarUML等工具辅助编写,交付时需包含主文档、原型图及需求跟踪矩阵。SRS应兼具技术性与管理性,作为沟通桥梁和验收标准。

moton2017的博客 2932

【JS/读书随笔】JavaScript编程精解/Eloquent JavaScript:Chapter 5 函数式编程

在知乎上有人推荐的这本书,抱着试试看的态度在图书馆借了本,只有160+页,完全不像其他编程书,但是这本书主要是从编程思想上来由浅入深写一些作者的心得体会,好多地方自己之前都没有想过,也没有实践过,总之这书写的比较叼,应该多看几遍。Chapter 5 函数式编程本章主要讲了一些函数编程抽象思想及技巧,粗略的读了一遍,学到了些皮毛,有空回来再多看几遍,相信会有更多收获。一、 throw+catch+tr

不会飞的超人先生的博客 738

光学相干断层扫描(OCT)在 妇科诊断 中的革命性应用

尽管OCT在妇科的应用提供了许多潜在的优势,但它仍然是一个相对新的技术,并不是所有医疗机构都有能力提供这种类型的成像服务。随着技术的发展和医生对OCT的熟悉程度的提高,预计OCT将在妇科和其他医学领域中扮演越来越重要的角色。早期发现和准确的分类是提高治疗成功率的关键。虽然这是一个相对较新的应用领域,但OCT的非侵入性和高分辨率成像能力可能提供有价值的信息,以提高辅助生殖技术的成功率。:光学相干断层扫描(OCT)在阴道和外阴组织的评估中的应用正在逐渐展开,提供了一种新的方法来诊断和监测各种妇科疾病。

LiRongLu_的博客 1722

基于卷积神经网络CNN实现电力负荷多变量时序预测(PyTorch版)

随着智能电网的发展,精准的电力负荷预测对能源调度和电网稳定具有重要意义。本文基于PyTorch框架,提出一种基于卷积神经网络(CNN)的多变量时间序列预测模型,用于电力负荷的短期预测。

时序笔记 989

【JS/读书随笔】JavaScript编程精解/Eloquent JavaScript:Chapter 6 面向对象编程

to be continued…

不会飞的超人先生的博客 644

【四足机器人项目实战】四足机器人弹簧倒立摆(SLIP)动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言1.动力学建模构型方法2.四足机器人动力学模型(1)多体动力学模型【针对躯干+脚建模】方法一:VMC(VirtualModelController)模型方法二:SLIP模型(2)浮基单体动力学模型【针对躯干建模】【用于MPC】 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人动力学模型-VMC、SLIP和浮动机体模型做个简

qq_35635374的博客 7313

【JS/读书随笔】JavaScript编程精解/Eloquent JavaScript:Chapter 2 函数

函数定义顺序 计算机在开始执行语句之前,会先查找所有的 function 定义,然后保存相关的 function,我们不必去思考多个函数定义的顺序,使用函数是允许它们之间相互调用,而不用考虑那个函数在第一个位置定义。 词法作用域 函数内部的变量集是否可见,取决于函数在程序中的位置,在函数“上面”定义的所有变量都是可见的,也就是存在于函数体内并包含函数定义的以及位于程序顶级的变量。javascri

不会飞的超人先生的博客 617

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【编程之美/读书笔记】Chapter 1 游戏之乐

这里就不写每个问题的题目了,只是记录一下自己的总结和心得。 1.1 让CPU占用率听你指挥 这个题目我刚接触的想法是和多核多线程要扯上关系的,因为自己写个死循环只能跑到CPU 35%左右的占用率,但是现在java多线程还没看,所以参考了一下单核的思想,决定过几天好好看看java多线程,再来解决这个问题,下面先总结一下目前的几点收获: 复习了一下 CPU 的频率,时钟周期的概念,举个例

不会飞的超人先生的博客 538

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【JAVA/读书随笔】网络

1. 概念 互联网协议(Internet Protocol, IP) 用来唯一地标识互联网上的计算机。IP地址由四段用点隔开的0~255的十进制数组成。由于IP地址不容易记住,所以经常将它们映射成 域名(Domain Name)这样有含义的名字,如 www.baidu.com。在互联网上有专门的 域名服务器(Domain Name Server, DNS) 把主机的名字转换成 IP 地址。

不会飞的超人先生的博客 489

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Java-Basic】并发编程

并发可以说是编程的一个重头,在Java中,由于其提供了比较好的封装,提供了很多方便的并发工具类供猿们使用,所以在Java中并发相对C++简单些。两本比较经典的Java并发书籍:《Java并发编程实战》、《并发编程的艺术》,我看的是前者,但是听同事说后者也不错,所以想研究下Java并发的同志们可以择一研读。下面奉上我的读书脑图:百度网盘:链接: https://pan.baidu.com/s/1Ng...

不会飞的超人先生的博客 470

【JAVA/读书随笔】Chapter 26 二叉查找树(BST)

二叉查找树(Binary Search Tree, BST) 二叉查找树的重要特点是:左子树一定不大于父结点,右子树一定比父结点大,所以可以将搜索时间复杂度控制在 log n 的水平上。 1. 表示 BST 定义结点: class TreeNode { E element; TreeNode left; TreeNode right; public Tre

不会飞的超人先生的博客 440

【JAVA/读书随笔】Chapter 22 算法效率

大 O 法衡量程序在 最差情况下的运行速度,它估计算法执行时间随着输入规模的增加能有多快的增长。 常见算法及其时间复杂度: 1. 线性查找 耗费 O(n) 时间,具有 O(n) 时间负责都的算法称为 线性算法。 2. 二分查找 耗费 O(logn) 时间。具有 O(logn) 时间复杂度的算法称为 对数算法。 3. 选择、插入排序 的最差情况时间复杂度为 O(n^2) 。具有 O(

不会飞的超人先生的博客 389
上一篇: 【JS/文档】js 中的 Arguments 对象
下一篇: 【JS】javascript 小技巧
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值