在javascript或者jQuery中绑定按钮点击事件,和在HTML 标签中直接调用onclick属性有什么区别?

本文探讨了Web开发中按钮点击事件的三种绑定方法:使用jQuery、纯JS及HTML的onclick属性。通过对比分析,文章提供了不同场景下推荐使用的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RT,做Web开发经常能遇到需要给一个按钮绑定一个点击事件的情况。

例如HTML标签:

<button type="submit" id="foo">Bar</button>

第一种,如果使用jQuery绑定点击事件的一种做法是:

$("#foo").click(function(event) {
/* Act on the event */});

第二种,纯js的做法可以是这样:

document.getElementById('#foo').addEventListener('click', function() {
/* Act on the event */}, false);

第三种,我们也可以直接在button标签中使用onclick,例如:

<button id="foo" onclick="dosomething()">Bar</button>

同时在head或者单独的js文件中定义dosomething()

<button href="javascript:void(0);" _xhe_href="javascript:void(0);" class="copyCode btn btn-xs" data-clipboard-text="" function="" dosomething(){="" *="" act="" on="" the="" event="" }"="" data-toggle="tooltip" data-placement="bottom" title="" style="color: rgb(255, 255, 255); font-style: inherit; font-variant: inherit; font-stretch: inherit; font-size: 12px; line-height: 1.5; font-family: inherit; margin: 0px 0px 0px 5px; overflow: visible; cursor: pointer; vertical-align: middle; border: 1px solid transparent; white-space: nowrap; padding-right: 5px; padding-left: 5px; border-radius: 3px; -webkit-user-select: none; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 2px; background-image: none; background-color: rgba(0, 0, 0, 0.74902);">复制
function dosomething(){/* Act on the event */}

请问从响应速度,后期维护等方面来看哪一种方法是best practice? 或者在什么情况下这几种方法最合适?


第一个回答:

HTML或原生js是单一对应绑定的,绑多了只留最后一个。jQuery是追加绑定的,绑多少执行多少。这个在每一本jQuery的书中都是首先提到的事情。

在单一绑定的条件下,由于jQuery底层其实也是js实现,所以速度区别并不大。至少“绑定”这个环节并不会成为速度的瓶颈。

总有人认为jQuery只是一堆无用的语法糖……但事实上,按照二八规律,至少80%以上的程序员,在做负载等要求不那么严格的“小程序”。所以从维护的角度上,我建议用jQuery绑定,简单清楚,最容易维护。

原生js,这是真正的熟练者的工具,如果能写明白那可能更不错。

唯一不能容忍的是HTML中用onclick事件混杂js。这样做的结果就是html前端和js前端的工作混在了一起,难以分离工作任务,进而难以维护,“项目毁于各部门的扯皮和推诿之中”。这种做法临时调试可以,但如果正式成品中大范围出现,那么html和js部分的责任人都必须检讨。

——————————————————————————————————————————————————————————————————

——————————————————————————————————————————————————————————————————

第二个回答:

第一种和第二种的效果是一样,可以附加多个事件处理函数,并不是只有使用jquery才能做到。 第三种方法不推荐使用,原则上HTML代码只能体现网页的结构,具体的行为应该使用javascript代码进行绑定。

除非页面上绑定事件的元素超过上万个,否则响应速度的时候就不必纠结了,只做个事件绑定还是很快的。我测试了一下,使用addEventListener绑定3000次,耗时3-4毫秒。

如果项目中统一使用jQuery的话,建议使用第一种做法,顺便还解决了IE的不兼容问题。


### 方法概述 在单体架构的应用中,如果需要从 JSP 页面 JavaScript 文件中提取按钮对应的 Java 方法名及其接口 URL,可以通过静态分析代码、动态代理或日志记录等方式实现。以下是具体的技术方案: #### 静态代码扫描工具 可以构建一个静态代码扫描工具,解析 JSP JS 文件的内容,识别其中的事件绑定逻辑,并匹配到相应的 Java 方法名 API URL。 - **JSP 文件**: 使用正则表达式或其他解析库(如 Jsoup[^1]),查找 `<button>` 或其他触发控件的相关 `onclick` 属性值,进一步定位其调用的具体函数。 - **JavaScript 文件**: 解析 `.js` 文件中的事件监听器定义(如 `addEventListener` 或 jQuery 的 `click` 绑定),并尝试追踪这些回调函数最终发送 HTTP 请求的目标地址。 ```java // 示例:使用Jsoup解析JSP文件 import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class JspParser { public static void main(String[] args) throws Exception { String jspContent = "<input type='button' onclick='callMethod()' value='Click Me'>"; Document doc = Jsoup.parse(jspContent); // 查找所有的输入标签 doc.select("input[type=button]").forEach(button -> { System.out.println("Button found with click handler: " + button.attr("onclick")); }); } } ``` 上述代码片段展示了如何利用 Jsoup 来解析 HTML/JSP 文档,并提取按钮上的点击事件处理器名称。 #### 动态拦截技术 另一种方式是在运行时通过 AOP (面向切面编程) 技术或者自定义过滤器捕获用户的交互行为。 - 对于服务器端方法调用路径跟踪,Spring AOP 提供了一个强大的机制来切入特定的方法执行前后阶段; - 客户端 AJAX 请求可通过覆盖全局 XMLHttpRequest.prototype.open 函数完成监控。 ```javascript (function() { var originalOpen = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function(method, url) { console.log('Request to:', method, url); // 记录请求详情 return originalOpen.apply(this, arguments); }; })(); ``` 此段脚本修改了浏览器内置 XHR 对象的行为,在每次发起新的网络连接前打印目标资源位置[^2]。 #### 日志增强策略 最后还可以考虑加强现有系统的日志输出能力,确保每一次用户动作都能被精确描述下来,便于后续审计分析。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值