2015-04-22 2 views
6

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

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

Если нет, то любых обходных решений?Javascript: определить, запущено ли событие пользователем, а не программно

Мои Слушателей:

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

Trigger Прецеденты: 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);

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

+0

JQuery является просто javascript. Если в jquery вы можете это сделать, вы можете сделать это в js. – rottenoats

+0

hmmm .... любая идея, как они делают это в jQuery? –

+0

Какой код программно запускает событие? – Scimonster

ответ

2

Я знаю, как это сделать в 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>

+0

Спасибо за ответ. Как я сказал в своем Вопросе, я использую чисто Js-событие и триггеры. Если бы я использовал jQuery, я бы не написал этот вопрос. –

+0

@bhavya_w Этот ответ помогает тем, у кого может быть такой же вопрос, как вы, но можете использовать jQuery. – reformed

3

[Обход] 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"); 
     } 
} 
+0

Хмм ... дай мне сделать снимок. Пока вы можете объяснить мне, как это работает? –

+0

Когда пользователь нажимает кнопку, у него будет реальный screenX и screenY, основанный на позиции кнопки. Но когда вы сделаете это из кода - это будет равно нулю. – Vijay

+0

@ Vijay Из всех решений, которые я пробовал, «e.isTrusted» или «e.originalEvent» или «e.which», которые все не работают, когда мы запускаем DOM, нажмите «$ (« # button ») [0] .click(); 'Ваше единственное решение, которое работает во всех сценариях и комбинации кликов. Но, к сожалению, он не работает для кликов по клавиатуре. Но anyways +1 для чистого и простого решения. – Anurag

7

В последних браузерах Event.isTrusted доступна для данного конкретного сценария использования. По его MDN document:

isTrusted только для чтения свойства интерфейса Event является логическим, что является истинным, когда событие было порождено действиями пользователя, и лжи, когда событие было создан или изменено с помощью сценария или отправляется через диспетчер.

Вы можете просто проверить внутри любого обработчика событий:

if (e.isTrusted) { 
/* The event is trusted. */ 
} else { 
/* The event is not trusted. */ 
} 

Browser Поддержка: Хром 46,0, Firefox (последний), Opera 33, Safari & IE (без поддержки)

Смежные вопросы