Эквивалент JavaScript для event.originalEvent? - PullRequest
0 голосов
/ 25 апреля 2018

Может кто-нибудь предложить мне кросс-браузер Javascript (должен поддерживать IE 11 и новые версии Safari, Firefox, Chrome), эквивалентный для свойства event.originalEvent в JQuery? Я попытался напрямую использовать event.originalEvent в своем коде JS, который прекрасно работает в браузере Chrome, но не в Firefox.

Мне нужно это свойство, чтобы различать фактический щелчок мыши и программный щелчок по элементу, и у меня нет свободы использовать JQuery.

РЕДАКТИРОВАТЬ: Ответ здесь , кажется, делает свое дело. Спасибо всем за помощь.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

В событии jQuery event.originalEvent эквивалентно Event object, которое передается слушателю события в javascript.

{
  let jQEvent, vanillaEvent;
  $( "input" ).bind( "click", e => console.log( jQEvent = e.originalEvent ) );
  document.querySelector( "input" ).addEventListener( "click", e => console.log( vanillaEvent = e ) );
  
  document.querySelector( "input" ).addEventListener( "click", e => console.log( vanillaEvent === jQEvent ) );

  document.querySelector( "input" ).addEventListener( "click", e => console.log( `Triggered with manual: ${e.isTrusted}` ) );
}

  setTimeout( () => {
    document.querySelector( "input" ).dispatchEvent( (()=>{
      let event = new Event( "click" );
      event.screenX = 1;
      event.screenY = 1;
      return event;
    })() );
  }, 2000 );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="submit">

Не используйте этот ответ . Это переменные значения.

0 голосов
/ 25 апреля 2018

Это просто родной event.Проверьте его isTrusted свойство:

Свойство isTrusted только для чтения интерфейса события является логическим значением, которое имеет значение true, когда событие было создано действием пользователя, и значение false, когда событие было создано илиизменено скриптом или отправлено через dispatchEvent.

const div = document.querySelector('div');
div.addEventListener('click', (e) => {
  if (e.isTrusted) console.log('manual click');
  else console.log('script click');
});
setInterval(div.click.bind(div), 2000);
<div>click</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...