2015-04-22 10 views
6

Bene, questa domanda è stata posta prima ma nel contesto di jQuery. In jQuery possiamo verificarlo tramite proprietà OriginalEvent dell'oggetto evento (link) che indica se è un evento manuale o programmato .

Nel mio caso sono utilizzandoListener di eventi Javascript e trigger. Possiamo distinguere tra i due tipi di eventi(programmato e manuale) in questo caso ??

Se no, quindi soluzioni alternative ??Javascript: Rileva se un evento è attivato dall'utente e non a livello di programmazione

miei ascoltatori:

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

trigger Casi d'uso: 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);

e molti altri ...

+0

jQuery è solo javascript. Se in jQuery puoi farlo, puoi farlo in js. – rottenoats

+0

hmmm .... qualche idea come lo fanno in jQuery? –

+0

Quale codice sta attivando automaticamente l'evento? – Scimonster

risposta

2

lo so come farlo in jQuery

è possibile utilizzare l'oggetto evento controllando 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

Grazie per la risposta. Come ho detto nella mia domanda, sto usando puro evento JS e trigger. Se avessi usato jQuery, non avrei postato questa domanda. –

+0

@bhavya_w Questa risposta aiuta chi ha la stessa domanda, ma può usare jQuery. – reformed

3

[Soluzione] Javascript: Verificare se event.screenX & event.screenY sono non-zero.

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 ... fammi fare un tentativo. Nel frattempo, puoi spiegarmi come funziona? –

+0

Quando l'utente fa clic sul pulsante, avrebbe alcuni screenX reali e schermati in base alla posizione del pulsante. Ma quando lo fai dal codice - sarebbe zero. – Vijay

+0

@Vijay Di tutte le soluzioni che ho provato, 'e.isTrusted' o' e.originalEvent' o 'e.which' che falliscono tutte quando si fa clic su DOM come '$ (" # button ") [0] .click(); "Your's è l'unica soluzione che funziona in tutti gli scenari e in una combinazione di clic. Ma sfortunatamente non funziona per i clic della tastiera. Ma in ogni caso +1 per una soluzione semplice e pulita. – Anurag

7

In browser più recenti, Event.isTrusted è disponibile per questo particolare caso d'uso. Come per il suo MDN document:

L'IsTrusted proprietà di sola lettura dell'interfaccia Event è un valore booleano che è vero quando l'evento è stato generato da un'azione dell'utente, e falso quando l'evento è stato creato o modificato da uno script o inviato tramite dispatchEvent.

si può semplicemente verificare all'interno di qualsiasi gestore di eventi:

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

Browser Support: Chrome 46.0, Firefox (ultima), Opera 33, Safari & IE (nessun supporto)

Problemi correlati