在 JavaScript 中添加事件的最佳方式是什么?

2024-05-05

我发现在 JavaScript 中设置事件有两种主要方法:

  1. 直接在标签内添加一个事件,如下所示:

    <a href="" onclick="doFoo()">do foo</a>

  2. 通过 JavaScript 设置它们,如下所示:

    <a id="bar" href="">do bar</a>

并在 a 中添加一个事件<script>里面的部分<head>部分或外部 JavaScript 文件中,如果您使用的是这样的原型JS:

Event.observe(window, 'load', function() {
    $('bar').observe('click', doBar);
}

我认为第一种方法更容易阅读和维护(因为JavaScript操作直接绑定到链接),但它不是那么干净(因为即使页面没有完全加载,用户也可以点击链接,这可能会导致JavaScript错误在某些情况下)。

第二种方法更干净(当页面完全加载时添加操作),但更难知道操作是否链接到标签。

哪种方法最好?

一个杀手级的答案将不胜感激!


我认为第一种方法更容易阅读和维护

我发现事实恰恰相反。请记住,有时多个事件处理程序将绑定到给定的控件。

在一个中心位置声明所有事件有助于组织站点上发生的操作。如果您需要更改某些内容,则不必搜索调用函数的所有位置,只需在一处进行更改即可。当添加更多应该具有相同功能的元素时,您不必记住向它们添加处理程序;相反,通常让它们声明一个类就足够了,甚至根本不更改它们,因为它们在逻辑上属于一个容器元素,该容器元素的所有子元素都连接到一个操作。从实际代码来看:

$$('#itemlist table th > a').invoke('observe', 'click', performSort);

这将事件处理程序连接到表中的所有列标题以使表可排序。想象一下使所有列标题可单独排序所需的努力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中添加事件的最佳方式是什么? 的相关文章

随机推荐

  • R从列表中删除子列表中的项目[重复]

    这个问题在这里已经有答案了 我有一个清单 L lt c a b c d e 我还有这个列表的一个子集 L1 lt c b d e 我正在尝试创建一个不包含子集列表的新列表 我努力了 L L in L1 L L in L1 L L in L1
  • SQL 工作表未显示在 SQL Developer 中

    Suddenly SQL worksheet is not displaying in my SQL Developer When I click on Open SQL Worksheet or Alt F10 nothing will
  • 是否可以使用 JavaScript 检查加载的图像大小

    这是一个完全愚蠢的问题 但我只是想澄清我的疑问 当图像加载时 我们可以使用以下命令检查加载状态onload or oncomplete事件 但我只是想知道有多少部分图像是使用 JavaScript 加载的 真的可能吗 我的问题是 我们可以从
  • 如何从 Flex Spark 列表的 DataProvider 对象获取其 ItemRenderer?

    在 Flex 中 我可以创建一个 ItemRenderer 来表示列表 DataProvider 中的每个项目 但如何通过 DataProviders 对象访问 ItemRenderer 的实例 就像是myList getItemRende
  • Pandas:Drop() int64 基于值返回对象

    我需要删除其中一列低于某个值的所有行 我使用了下面的命令 但这将列作为对象返回 我需要将其保留为int64 df customer id df drop df customer id df customer id lt 9999999 in
  • 自定义编译器警告

    在 Net 中使用 ObsoleteAtribute 时 它 会向您发出编译器警告 告诉您该对象 方法 属性已过时 应使用其他内容 我目前正在从事一个需要大量重构前员工代码的项目 我想编写一个自定义属性 可用于标记方法或属性 这些方法或属性
  • 基于 ASP.NET 的工作流引擎

    我正在为一个新应用程序制定设计规范 该应用程序将在很大程度上由工作流程驱动 在我重新发明轮子之前 是否已经有一个像样的轻量级工作流引擎可以插入 ASP NET 中 基本上 我正在寻找能够在一组定义的工作流程页面中移动 同时自动处理状态管理的
  • C# - 使用 Linq 获取 Attribute 的属性

    我有一个属性 它本身就有属性 我想访问这些属性之一 布尔值 并检查它是否正确 我能够检查属性是否已设置 但这就是全部 至少对于 linq 来说是这样 属性 public class ImportParameter System Attrib
  • GreenDao交易

    我在用着GreenDao存储大量数据 来自休息服务 我的很多实体都与关系相关 一切都很顺利 但明天我必须实施坚如磐石的工作流程 当我加载数据时我必须检查是否发生错误 如果是这样 我必须确保没有存储任何内容在 SQLite 数据库中 通常我会
  • 快速比较两个自定义对象

    我在 Swift 中定义了以下协议 protocol RecordingObserver func aFunc 我必须在某个地方比较实现此协议的两个对象 以检查它们是否相同 我面临的问题是显然 Swift 不允许我们这样做 func are
  • 连接2个表区分大小写

    我有 2 个表 需要获取品牌代码的结果 例如 在数据库中 我有两个不同的品牌 但它们的代码是相同的 只有小写和大写不同 例如 代码名称 关于耐克 和阿迪达斯 如何在代码上内连接 2 个表以分别获取这 2 个表 现在 在内连接之后我得到了这
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • 错误:java.lang.NoSuchMethodError:org/springframework/asm/ClassVisitor.(I)V

    我的 POM 中有这两个依赖项 我认为这是造成此问题的原因 但我尝试了许多不同的方法和更新的版本 但没有任何效果对我有用 有人可以帮忙吗 XML文件
  • 我写了一个 SQL 查询但没有运行,为什么? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 当前表 EmployeeID CompanyID EmployeeCode EmployeeName 1001 C001 11919 ABC
  • Azure 流分析:如果作业查询是按天计算的 TUMBLINGWINDOW,流分析作业何时实际处理数据?

    Context 我使用 Azure 门户创建了一个流作业 该作业使用每日 TUMBLINGWINDOW 聚合数据 下面附加了一个从文档修改而来的代码片段 它显示了类似的逻辑 SELECT DATEADD day 1 System Times
  • 同步 jQuery 动画

    我正在尝试同时获得淡入 不透明度切换 和边框淡入 使用jquery 动画颜色 http www bitstorm org jquery color animation 同时开火 但我遇到了一些麻烦 有人可以帮忙查看以下代码吗 fn exte
  • iPhone UITableView - 删除按钮

    我正在使用 滑动删除 功能UITableView 问题是我正在使用定制的UITableViewCell这是在每个项目的基础上创建的 UITableViewCell tableView UITableView aTableView cellF
  • JavaScript 类继承

    谁能告诉我为什么我的 showDiv boo 在类的方法中未定义 我也无法访问我的类的方法 这是我的 Blink 类及其属性和方法 function Blink div this div div Blink prototype counte
  • pyspark:将 schemaRDD 保存为 json 文件

    我正在寻找一种将数据从 Apache Spark 以 JSON 格式导出到各种其他工具的方法 我认为一定有一种非常简单的方法来做到这一点 示例 我有以下 JSON 文件 jfile json key value a1 key2 value
  • 在 JavaScript 中添加事件的最佳方式是什么?

    我发现在 JavaScript 中设置事件有两种主要方法 直接在标签内添加一个事件 如下所示 a href do foo a 通过 JavaScript 设置它们 如下所示 a href do bar a 并在 a 中添加一个事件