dou*_*aci 0 javascript ajax jquery addeventlistener
是否有纯JS版本?
$(document).on('click', 'a[href]', function(event) {
event.preventDefault();
here.change(this);
});
Run Code Online (Sandbox Code Playgroud)
我正在寻找的特定功能是为以后通过JS(例如AJAX)创建的任何链接添加事件监听器。
现代的浏览器支持matches使这变得更加容易
document.addEventListener('click', function(event) {
if (event.target.matches('a[href], a[href] *')) {
event.preventDefault();
console.log('works fine')
}
}, false);
document.body.innerHTML = '<a href="#"><span>Click Me!</span></a><br /><div>not me!</div>';Run Code Online (Sandbox Code Playgroud)
您可以通过简单的功能使此操作更加方便
function addEvent(parent, evt, selector, handler) {
parent.addEventListener(evt, function(event) {
if (event.target.matches(selector + ', ' + selector + ' *')) {
handler.apply(event.target.closest(selector), arguments);
}
}, false);
}
Run Code Online (Sandbox Code Playgroud)
请注意,closest()只有最新的浏览器才支持,MDN上有一个polyfill
这可以复制更多的jQuery行为,并且更易于使用,并且可以this正确设置值
function addEvent(parent, evt, selector, handler) {
parent.addEventListener(evt, function(event) {
if (event.target.matches(selector + ', ' + selector + ' *')) {
handler.apply(event.target.closest(selector), arguments);
}
}, false);
}
Run Code Online (Sandbox Code Playgroud)
我相信这可以实现你想要的:
// for all dom elements on click
document.onclick = function(event) {
var el = event.target; // get what is being clicked on
if(el.hasAttribute('href') && el.tagName == 'a') { // check if it's a link
event.preventDefault();
here.change(this); // what is this?
}
}
Run Code Online (Sandbox Code Playgroud)