锚上的委派点击事件
Delegated click event on anchors
我正在尝试以锚标记为目标并触发ajax请求。使用jQuery这很容易:
$(document.body).on('click', "a", function (event) {
'use strict';
if ($(this).is('.a-btn')) {
event.preventDefault();
} else if ($(this).is('.no-sp')) {
//
} else {
address = $(this).attr("href")
event.preventDefault();
App.Ajax.Page(address + '/');
}
});
然而,使用本机javascript,我想使用event.target
就可以了。
但这不起作用,因为事件总是针对锚点标签中的任何元素:
App.Ajax.Navigate = function () {
'use strict';
document.body.addEventListener('click', function (e) {
e.preventDefault();
console.log(e.currentTarget);
if (e.target.tagName === 'a') {
var element, link;
element = e.target;
link = element.href;
if (App.HTML.hasClass(element, 'a-btn')) {
e.preventDefault();
} else if (App.HTML.hasClass(element, 'no-sp')) {
return;
} else {
e.preventDefault();
App.Ajax.Page(link);
}
}
}, true);
window.onpopstate = function (event) {
App.Page.type = event.state.type;
App.Page.Replace(event.state.content, event.state.type, App.Empty, false);
};
};
我想使用原生javascript来做jquery在第一个代码片段中所做的事情,这可能吗?
https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
https://developer.mozilla.org/ru/docs/Web/API/Element/closest-此处为2个polifills
event.target.closest("a")
不要忘记大多数浏览器的polifill。
(function(e){
if (!e.matches) {
e.matches = e.mozMatchesSelector || e.msMatchesSelector || e.oMatchesSelector || e.webkitMatchesSelector;
}
if (!e.closest) {
e.closest = function (css) {
for (var node = this; node; node = node.parentElement) {
if (node.matches(css)) {
return node;
}
}
return null;
}
}
})(Element.prototype);
相关文章:
- 来自文档或下一个静态父级的事件委派
- jQuery中的事件委派,如何进行
- 修改鼠标事件对象的“目标”以进行事件委派
- 动态表行,将单击事件委派给新添加的元素
- Javascript中的动态表和事件委派
- JQUERY的事件委派问题
- 如何用模块模式扩展javascript中的事件委派
- Jquery可拖动&可丢弃事件委派:stop&滴
- JavaScript事件委派-行为
- 事件委派后表单不起作用
- 事件委派模式,在按钮中使用 addEventListener 和嵌套元素
- iframe 中输入上的模糊/焦点事件(委派)
- 为什么要做出反应.js事件委派很快
- Jquery 事件委派问题
- 基于类的 DOM 事件委派
- ExtJS 事件委派不起作用
- 事件委派问题
- 事件委派 - jQuery
- 将事件委派给主干中的父视图
- 使用事件委派,为什么事件阶段为 0,表示无