Скажите, что у меня установлен обработчик кликов:
$("#foo").click(function(e){
});
Как я могу в рамках обработчика функции указать, было ли событие запущено программно или пользователем?
Скажите, что у меня установлен обработчик кликов:
$("#foo").click(function(e){
});
Как я могу в рамках обработчика функции указать, было ли событие запущено программно или пользователем?
Вы можете посмотреть объект события e
. Если событие было вызвано реальным нажатием, у вас будут такие вещи, как clientX
, clientY
, pageX
, pageY
и т.д. Внутри e
, и они будут числами; эти числа связаны с положением мыши при нажатии кнопки, но они, вероятно, будут присутствовать, даже если клик был инициирован с клавиатуры. Если событие было вызвано $x.click()
, тогда у вас не будет обычных значений позиции в e
. Вы также можете посмотреть свойство originalEvent
, которого не должно быть, если событие произошло от $x.click()
.
Возможно, что-то вроде этого:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
И вот небольшая песочница для игры: http://jsfiddle.net/UtzND/
Вы можете использовать дополнительный параметр, как указано в jQuery trigger manual:
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
Уже есть еще один вопрос.
Как определить, является ли щелчок() щелчком мыши или вызван каким-то кодом?
Используйте свойство which
объекта события. Это должно быть undefined
для событий, вызванных кодом
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
Пример JsFiddle - http://jsfiddle.net/interdream/frw8j/
Надеюсь, что это поможет!
DOM Уровень 3 указывает event.isTrusted. Это поддерживается только в IE9 + и Firefox (на основе моих тестов. Я также читал (хотя и не тщательно изучил), что он может быть переопределен в некоторых браузерах и, вероятно, еще не на 100% готов к тому, чтобы на самом деле быть доверенным (к сожалению).
Это - модифицированная версия @mu скрипта, которая работает в IE и Firefox.
Не собираюсь участвовать в интеллектуальном обсуждении, код, который работал у меня для фильтрации .click()
и .trigger('click')
, -
$(document).on('click touchstart', '#my_target', function(e) {
if (e.pageX && e.pageY) { // To check if it is not triggered by .click() or .trigger('click')
//Then code goes here
}
});