2015-04-22 13 views
6

Cóż, to pytanie zostało zadane wcześniej, ale w kontekście jQuery. W jQuery możemy to sprawdzić przez propertyEvent property obiektu zdarzenia (link), który określa, czy jest to zdarzenie ręczne lub zaprogramowane .
W moim przypadku mam przy użyciuJavaScript Odsłuchiwanie zdarzeń i wyzwalaczy. Czy możemy rozróżnić między dwoma rodzajami zdarzeń(zaprogramowany i ręczny) w tym przypadku?

Jeśli nie to żadnych obejść?Javascript: Wykryj, czy zdarzenie jest wyzwalane przez użytkownika, a nie programowo

Moi słuchacze:

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

wyzwalania przypadków użycia: 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);

i wiele innych ...

+0

jQuery jest tylko javascript. Jeśli w jquery możesz to zrobić, możesz to zrobić w js. – rottenoats

+0

hmmm .... jakikolwiek pomysł jak to zrobić w jQuery? –

+0

Jaki kod jest programowo wyzwalający zdarzenie? – Scimonster

Odpowiedz

2

wiem jak to zrobić w jQuery

można użyć obiektu zdarzenia sprawdzając 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

Dzięki za odpowiedź. Jak powiedziałem w moim pytaniu, używam zdarzenia Jess i wyzwalaczy. Gdybym używał jQuery, nie opublikowałbym tego pytania. –

+0

@ bhavya_w Ta odpowiedź pomaga osobom, które mogą mieć to samo pytanie, ale mogą używać jQuery. – reformed

3

[Rozwiązanie] JavaScript: Sprawdź, czy event.screenX & event.screenY są niezerowe.

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

hmm ... daj mi szansę. Tymczasem proszę mi wyjaśnić, jak to działa? –

+0

Gdy użytkownik kliknie przycisk, będzie miał prawdziwy screenX i screenY w zależności od pozycji przycisku. Ale kiedy zrobisz to z kodu - będzie zero. – Vijay

+0

@Vijay Ze wszystkich rozwiązań, które wypróbowałem: 'e.isTruststed' lub' e.originalEvent' lub 'e.which', które kończą się niepowodzeniem po uruchomieniu kliknięcia DOM, jak '$ (" # button ") [0] .click(); 'Twoje jest jedynym rozwiązaniem, które działa we wszystkich scenariuszach i kombinacji kliknięć. Ale niestety nie działa to w przypadku kliknięć klawiatury. Ale tak czy inaczej +1 dla czystego i prostego rozwiązania. – Anurag

7

W najnowszych przeglądarkach Event.isTrusted jest dostępna dla tego konkretnego zastosowania przypadku. Jak na jego MDN document:

isTrusted tylko do odczytu właściwości interfejsu wydarzenie jest logiczna, która jest prawdziwa, gdy zdarzenie zostało wygenerowane przez działanie użytkownika, a fałszywe, gdy zdarzenie zostało utworzone lub zmodyfikowane przez skrypt lub wysłane przez dispatchEvent.

można po prostu sprawdzić wewnątrz jakiejkolwiek obsługi zdarzenia:

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

Wsparcia Przeglądarka: Chrome 46.0, Firefox (ostatnia), Opera 33, Safari & IE (brak wsparcia)

Powiązane problemy