2012-06-07 13 views
7

questa domanda è simile come In Jquery, how can I tell between a programatic and user click?Javascript/jquery come distinguere tra un clic attivato e un utente?

ma io non sono in grado di farlo, il mio codice

<div class="sample_class" onclick="sample_fn(arg1,arg2,arg3,arg4, e);" ></div> 
<div class="trigger_class" onclick="trigger_fn()></div> 


function sample_fn(arg1,arg2,arg3,arg4, e){ 
    console.log(e) ; 
    console.log(e.isTrigger); 
    console.log(e.hasOwnProperty('originalEvent')); 
} 


function trigger_fn(){ 
    $(".sample_class").trigger("click") 
} 

al clic su div.sample_class Io sono sempre in consolle oggetto indefinito falsa

facendo clic su div.tigger_class mi trovo nella console stessa cosa Oggetto indefinito false

Non riesco a distinguere tra questi due clic. Grazie in anticipo

+1

Quindi perché si sta simulando un clic? Scrivi una nuova funzione che non condivide lo stesso codice. Puoi anche leggere su [event namespacing] (http://docs.jquery.com/Namespaced_Events) o [eventi personalizzati] (http://corymathews.com/jquery-custom-events/) per vedere se sarebbero aiuta la tua situazione. – Blazemonger

+1

Nel tuo HTML hai 'onclick =" tigger_fn() "' e nella funzione Javascript hai 'trigget_fn()' - gli errori di battitura non aiuteranno a far funzionare nulla. Se non sono nel tuo codice reale, non dovrebbero nemmeno essere nella tua domanda. –

+0

L'errore di battitura è rettificato qui .....In realtà non è nel codice – druveen

risposta

6

UPDATE: Come di jQuery 1.7+, l'oggetto evento (e nel seguente codice) oggetto conterrà una proprietà denominata e.isTrigger che è true se l'evento è stato attivato e indefinito se non innescato; questo non è documentato quindi controlla questo (demo) prima di usarlo. Se si utilizza una versione precedente di jQuery, utilizzare il seguente codice.


Potrebbe essere semplicemente più semplice passare un flag alla funzione. Ecco una demo:

HTML

<button>Trigger a click below</button> 

<div id="test">Click Me</div>​ 

Script

​$('#test').click(function(e, triggered){ 
    var msg = (triggered) ? ', triggered' : ''; 
    console.log('clicked' + msg); 
});​​ 

$('button').click(function(){ 
    // pass a true flag to the click function to indicate 
    // it's been triggered 
    $('#test').trigger('click', true); 
}); 

Aggiornamento: data-attributi possono contenere JSON valido che viene convertito automaticamente in un oggetto (demo):

<div class="test" data-args='{ "quantity": 1, "type": "pizza", "extra1": "peperoni", "extra2": "cheese", "extra3": "cheesy bread" }'>Click Me</div> 

Si noti che lo data-arg utilizza una virgoletta singola per contenere il JSON, ma il JSON all'interno DEVE utilizzare le virgolette doppie attorno a ogni chiave e valore (a meno che non sia numerico).

quindi utilizzare il metodo di dati per estrarre le informazioni:

var args = $(this).data('args'); 

In alternativa, è possibile effettuare un data-attributo separato per ogni argomento (demo):

<div class="test" data-quantity="1" data-type="pizza" data-extra1="peperoni" data-extra2="cheese" data-extra3="cheesy bread">Click Me</div> 

Quindi utilizzare raccogliere tutte i dati dall'elemento come segue:

var args = $(this).data(); 
+0

In realtà la funzione onclick non è vincolata con jquery. Quindi questo non aiuta nel mio caso ha modificato la tua demo http://jsfiddle.net/hQAWv/. – druveen

+0

Non è necessario utilizzare 'onclick', è possibile aggiungere gli argomenti specifici negli attributi dei dati e ottenerli in questo modo. – Mottie

+0

o [fai questo] (http://jsfiddle.net/Mottie/hQAWv/1/): 'function trigger_fn (e) {test_fn (e, true); } ' – Mottie

Problemi correlati