Нажмите на источник в JavaScript и JQuery, человек или автоматизированный? - PullRequest
3 голосов
/ 08 августа 2011

Мы все знаем, что вы можете смоделировать щелчок или любое другое событие на элементе одним из следующих способов:

$('#targetElement').trigger('eventName');
$('#targetElement').click();

Я столкнулся с ситуацией, в которой я должен знать, как нажимается элемент.Я должен знать, был ли он нажат автоматически с помощью кода или нажатием кнопки мыши.Можно ли как-нибудь обойтись без хаков или обходных путей?Я имею в виду, есть ли что-то встроенное в объект события браузера, JavaScript или jQuery, который может сказать нам, был ли щелчок инициирован человеческим действием или кодом?

Ответы [ 4 ]

6 голосов
/ 08 августа 2011

Попробуйте это:

$('#targetElement').click(function(event, generated) {
    if (generated) {
        // Event was generated by code, not a user click.
    } else {
        // Event was generated by a user click.
    }
});

Затем, чтобы заставить это работать, вы должны вызвать их так:

$('#targetElement').trigger('click', [true]);

См. этот jsfiddle .

4 голосов
/ 08 августа 2011

Проверьте event.which, это будет undefined, если сработает с кодом.

$(document).click(function(event) {
    if (event.which) {
       // Triggered by the event.
    } else {
       // Triggered with code.
    }
});

jsFiddle .

2 голосов
/ 08 августа 2011

Вот один из способов, который я нашел (проверено в Chrome)

$('#foo').click(function(e) {
    if (e.originalEvent)
        alert('Has e (manual click)');
    else
        alert('No e (triggered)');
});

Смотрите здесь для тестирования: http://jsfiddle.net/ZPD8w/2/

0 голосов
/ 08 августа 2011

В вашем непосредственном обработчике событий укажите параметр e.Если клик автоматизирован (с помощью кода), это e будет неопределенным (нет необходимости проверять e.target, как сказал @alex):

$('#targetElement').click(function(e){
   if(e)
   {
      // Click is triggered by a human action
   }
   else
   {
     // Click is triggered via code
   }
});
...