Привет Я хочу вызвать функцию каждый раз перед любым методом обработчика события клика. Я знаю, что внутри метода обработчика я могу сначала вызвать свою функцию, но это довольно громоздко, поскольку я должен делать это на столь большом месте, а также иметь в виду то же самое для любых будущих событий кликов.Вызов функции перед любым обработчиком события click
ответ
Вы можете установить обработчик события захвата на объект document
(или любой общий родительский элемент), и он будет вызываться первым перед обработчиком события на отдельном объекте. capture
является третьим аргументом .addEventListener()
, который обычно является необязательным и по умолчанию равен false
, но если вы передадите true
на родителя, тогда обработчик события будет вызываться первым.
Вот пример:
document.addEventListener("click", function() {
log("document capture click");
}, true);
document.getElementById("target").addEventListener("click", function() {
log("element click");
}, false);
function log(x) {
var div = document.createElement("div");
div.innerHTML = x;
document.body.appendChild(div);
}
<div id="target">Some text to click on</div>
Вот связанный с этим вопрос, который помогает понять флаг захвата: Unable to understand useCapture attribute in addEventListener
Я вижу два решения здесь.
Первый заключается в использовании OnMouseDown, который обжигают до события щелчка
document.querySelector('.selector').addEventListener('mousedown', function(){
console.log('mousedown');
}
document.querySelector('.selector').addEventListener('click', function(){
console.log('click');
}
Другой способ заключается в использовании Compose, который будет создавать новый многоразовый функция для вас (НПМ я lodash.compose).
var compose = require(lodash.compose);
var firstFunc = function(e){
console.log('first');
return e; //if you want to use it in second function
};
var secondFunc = function(e) {
console.log('second');
};
document.querySelector('.selector').addEventListener('click', compose(secondFunc, firstFunc));
Или вы можете сохранить новый func в переменной;
var logFirstThanSecondOnClick = compose(secondFunc, firstFunc);
document.querySelector('.selector').addEventListener('click', logFirstThanSecondOnClick);
Просто сочинить сделать следующий
function compose(f, g) {
return function(x) {
return f(g(x));
}
}
Но lodash один более сложный внутри.
Вот некоторые математические теории о композиции функций, если вы заинтересованы в https://en.wikipedia.org/wiki/Function_composition
- 1. вызов функции jquery внутри события click click
- 2. Метод C#, возвращаемый перед обработчиком события, называется
- 3. jQuery вызов события click после события taphold
- 4. jQuery's .prev на многочисленных div с обработчиком события 'click'?
- 5. Как связать ng-click с обработчиком события, определенным внутри директивы?
- 6. Вызов функции TypeScript в HTML без события click
- 7. Вызов события перед выгрузкой страницы
- 8. вызов функции перед скриптом onclick
- 9. Вызов функции перед выходом функции
- 10. Вызов функции перед главным
- 11. Вызов функции внутри переменной
- 12. Выполнение кода перед любым действием
- 13. вызов функции изнутри функции jquery click
- 14. Вызов функции внутри события jQuery
- 15. Кнопка Событие Click вызывает вызов для проведения события
- 16. Вызов функции после события onload
- 17. Вызов Form2 кнопку Click событие из Form1 Кнопки Click события
- 18. Связывание определенного контекста с обработчиком события
- 19. Вызов сессии перед любым Действие контроллера выполняется в MVC
- 20. вызов функции, определенной пользователем в jQuery live
- 21. вызов функции перед вызовом метода
- 22. Вызов функции перед обновлением страницы
- 23. Вызов функции объекта перед объявлением
- 24. Вызов функции перед модальным диалогом
- 25. Вызов события кнопки из функции
- 26. Вызов события краски внутри функции
- 27. Вызов функции Javascript без события
- 28. странное поведение с обработчиком jquery click
- 29. вызов функции события jquery с oop?
- 30. Передача нескольких значений результата ajax функции, вызванной обработчиком события
[Не могли бы вы показать нам код?] (Http://stackoverflow.com/help/how-to-ask) –