javascript - 我可以将 HTML 元素绑定(bind)到 js 函数(而不是其他方式)吗?

标签 javascript html

使用 jQuery,我可以在 HTML 中执行类似的操作

<button id="click_me" type="button">Hello</button>

这是 js 中的

$('#click_me').on('click', function() {alert('Hello')});

但我想以相反的方式进行关联。例如。 HTML 中类似这样的内容

<button function="click_me" type="button">Hello</button>

这是 js 中的

function click_me() {alert('Hello')};

是否有任何本地方法可以做到这一点,或者有一个库/框架可以做到这一点(我只知道一点点 jQuery)?将参数传递给 click_me 怎么样?如果 click_me 是其他命名空间的成员(即 click_me 不是全局名称),我如何告诉 HTML 有关此命名空间的信息?我最终会得到与使用 jQuery 方式一样多的事件监听器吗? (如果使用 jQuery,我将有很多事件监听器并且更喜欢事件委托(delegate))

最佳答案

您可以使用所谓的“传统事件注册”,这就是 @user3218194 评论和 Tsalikidis 回答的内容。但在现代 Web 开发中并不推荐这样做,因为它混合了页面的呈现和逻辑,并且在过去造成了很多维护问题(更不用说无法为同一事件类型注册更多的事件监听器)。

如果您确实无法忍受注册监听器,请使用事件委托(delegate):

<button data-behavior="click_me" type="button"></button>

jQuery:

$(document).on("click", "button[data-behavior='click_me']", function() {
    // Note: when using event delegation in jQuery, the keyword 'this' refers to the
    // target element, not the element 'on' has been called on (document in this case)
    alert("Hello, " + this.tagName); // should alert "Hello, BUTTON"
});

如果您一劳永逸地执行此操作,即使是新添加的 data-behavior="click_me" 按钮也会触发事件监听器。

这样,您就为元素附加了一个语义属性,然后由您的脚本管理该属性。

关于javascript - 我可以将 HTML 元素绑定(bind)到 js 函数(而不是其他方式)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115842/

相关文章:

IE 中的 JavaScript 问题 - 需要对象吗?

python - 如何转换html链接?

html - 媒体查询最小宽度不起作用

javascript - 将 Angular 表达式传递给函数

javascript - RactiveJS:数据绑定(bind)文本区域导致 "cannot call removeChild with null"

javascript - 我可以在进行 AJAX 调用时阻止调用 window.onbeforeunload

html - td 和 th 边界越过表格边界

javascript - 如何阻止事件影响图库?

javascript - html5 msie javascript 让 DOM 处理在 MSIE 中工作

javascript - 用javascript中的按钮显示所有投资组合元素