Определить, запускается ли событие пользователем, а не программно

Ну, этот вопрос уже задавался, но в контексте jQuery. В jQuery мы можем проверить это с помощью свойства originalEvent объекта события (ссылка), которое сообщает, является ли это ручным или запрограммированным событием.

В моем случае я использую прослушивателисобытий Javascript и триггеры. Можем ли мы различать два вида событий (запрограммированныйи ручной) в этом случае?

Если нет, то какие-нибудь обходные пути?

Мои слушатели:

   function setUpListeners(){
       _cellViewWrapper.addEventListener('mousedown',mouseDownHandler,false);
       _cellViewWrapper.addEventListener('mouseover',mouseEnter,false);
       _cellViewWrapper.addEventListener('blur',blurHandler,true);
       _cellViewWrapper.addEventListener('focus',focusEventHandler,true);
   }'

Варианты использования триггера:

  1. if(!IE_FLAG) hidePicker();
               //if browser is internet explorer
               else{
                   //if blur is allowed then hide Picker
                   if(_ieBlurAllowed) hidePicker();
                   //if blur is not allowed -- keep focus on picker input
                  //triggering the focus event here
                   else blurredElement.focus(); /
             }
    
  2. if((inputElem !== _focussedInput)) setTimeout(function(){ inputElem.focus(); },10);

и многое другое...

Ответ 1

В последних браузерах Event.isTrusted доступен для этого конкретного варианта использования. Согласно документу

Ответ 2

[Обходной путь] Javascript: проверьте, отличны ли от event.screenX и event.screenY.

var button = document.getElementsByTagName('button')[0];

button.onclick = function(e) {
  if(e.screenX && e.screenX != 0 && e.screenY && e.screenY != 0){
         alert("real button click");
       }   
}

Ответ 3

Я знаю, как это сделать в jQuery

вы можете использовать объект события, установив e.isTrigger

Fiddle

$(".lol").click(function(e){
    console.log(e)
    alert("Is triggered: " + (e.isTrigger ? true:  false))
})

$(".trigger-lol").click(function(e){
    $(".lol").trigger("click")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="lol">lol</div>
<div class="trigger-lol">Trigger lol</div>

Ответ 4

Это работает для меня

if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) {
    //Hey hooman it is you
    //Real CLick
}