如何正确注册点击事件?
How can I properly register click events?
我正在尝试在将触发一次的元素上注册一个新的点击事件,运行它的代码然后执行任何其他绑定事件或默认方法。
例如:
用户单击一个锚点,一个函数将执行,一旦完成,锚点将继续其默认行为。理想情况下,这应该首先执行我的功能,以防有其他点击事件绑定到锚点。
这是我正在尝试的:
(function() {
// Link
var anchor = document.querySelector('a.selector');
// Helpers
Element.prototype.hasClass = function(className) {
return this.className && new RegExp("(^|\s)" + className + "(\s|$)").test(this.className);
};
Element.prototype.addClass = function(className) {
return this.className = this.className + " " + className;
};
// Click function
var someFunction = function() {
if (this.hasClass('clicked')) {
return true;
}
// Prevent default behavior
this.preventDefault();
this.stopPropagation();
// Run some code...
this.addClass('clicked');
this.click();
return false;
};
anchor.addEventListener('click', someFunction);
})();
<a href="//google.com" class="selector">Google</a>
我已经添加了 preventDefault 和 stopPropagation,但 link 对我来说仍然继续。
我试图在元素上调用 preventDefault 和 stopPropagation,而不是在事件上。
解决方案是:
(function() {
// Link
var anchor = document.querySelector('a.selector');
// Helpers
Element.prototype.hasClass = function(className) {
return this.className && new RegExp("(^|\s)" + className + "(\s|$)").test(this.className);
};
Element.prototype.addClass = function(className) {
return this.className = this.className + " " + className;
};
// Click function
var someFunction = function(event) {
if (this.hasClass('clicked')) {
return true;
}
// Prevent default behavior
event.preventDefault();
event.stopPropagation();
// Run some code...
// Add clicked class and recall the click
this.addClass('clicked');
this.click();
return false;
};
anchor.addEventListener('click', someFunction);
})();
<a href="//google.com" class="selector">Google</a>
我正在尝试在将触发一次的元素上注册一个新的点击事件,运行它的代码然后执行任何其他绑定事件或默认方法。
例如: 用户单击一个锚点,一个函数将执行,一旦完成,锚点将继续其默认行为。理想情况下,这应该首先执行我的功能,以防有其他点击事件绑定到锚点。
这是我正在尝试的:
(function() {
// Link
var anchor = document.querySelector('a.selector');
// Helpers
Element.prototype.hasClass = function(className) {
return this.className && new RegExp("(^|\s)" + className + "(\s|$)").test(this.className);
};
Element.prototype.addClass = function(className) {
return this.className = this.className + " " + className;
};
// Click function
var someFunction = function() {
if (this.hasClass('clicked')) {
return true;
}
// Prevent default behavior
this.preventDefault();
this.stopPropagation();
// Run some code...
this.addClass('clicked');
this.click();
return false;
};
anchor.addEventListener('click', someFunction);
})();
<a href="//google.com" class="selector">Google</a>
我已经添加了 preventDefault 和 stopPropagation,但 link 对我来说仍然继续。
我试图在元素上调用 preventDefault 和 stopPropagation,而不是在事件上。
解决方案是:
(function() {
// Link
var anchor = document.querySelector('a.selector');
// Helpers
Element.prototype.hasClass = function(className) {
return this.className && new RegExp("(^|\s)" + className + "(\s|$)").test(this.className);
};
Element.prototype.addClass = function(className) {
return this.className = this.className + " " + className;
};
// Click function
var someFunction = function(event) {
if (this.hasClass('clicked')) {
return true;
}
// Prevent default behavior
event.preventDefault();
event.stopPropagation();
// Run some code...
// Add clicked class and recall the click
this.addClass('clicked');
this.click();
return false;
};
anchor.addEventListener('click', someFunction);
})();
<a href="//google.com" class="selector">Google</a>