2012-06-07 8 views
7

esta pregunta tiene una apariencia similar como In Jquery, how can I tell between a programatic and user click?Javascript/jquery ¿cómo diferenciar entre un clic activado y un usuario?

pero no soy capaz de hacerlo, mi código

<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 pulsarlo div.sample_class me estoy poniendo en la consola objeto indefinido falsa

al hacer clic en div.tigger_class me estoy poniendo en la consola lo mismo Objeto undefined false

No puedo diferenciar entre estos dos clics. Gracias de antemano

+1

Entonces, ¿por qué está simulando un clic? Escriba una nueva función que no comparta el mismo código. También puede leer en [espacios de nombres de eventos] (http://docs.jquery.com/Namespaced_Events) o [eventos personalizados] (http://corymathews.com/jquery-custom-events/) para ver si hubieran ayuda tu situación – Blazemonger

+1

En su HTML tiene 'onclick =" tigger_fn() "' y en Javascript tiene 'función trigget_fn()' - los errores tipográficos no ayudarán a que nada funcione. Si no están en su código real, tampoco deberían estar en su pregunta. –

+0

error de error se rectifica aquí .....En realidad, no está en el código – druveen

Respuesta

6

ACTUALIZACIÓN: A partir de jQuery 1.7+, el objeto de evento (e en el código de abajo) objeto contendrá una propiedad denominada e.isTrigger que es true si el evento se activó e indefinido si no se activa; esto no está documentado, así que verifique esto (demo) antes de usarlo. Si usa una versión anterior de jQuery, use el siguiente código.


Simplemente podría ser más fácil pasar una bandera a su función. Aquí es un demo:

HTML

<button>Trigger a click below</button> 

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

Guión

​$('#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); 
}); 

Actualización: ficha atributos pueden contener JSON válida que se convierte automáticamente en un objeto (demo):

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

Tenga en cuenta que el data-arg utiliza una comilla simple para contener el JSON, pero el JSON dentro DEBE usar comillas dobles alrededor de cada clave y valor (a menos que sea numérico).

continuación, utilizar el método de datos para extraer la información:

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

Alternativamente, puede hacer un atributo de datos separada para cada argumento (demo):

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

A continuación, utilice reunir toda los datos del elemento de la siguiente manera:

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

En realidad, la función onclick no está enlazada mediante jquery. Por lo tanto, esto no ayuda en mi caso ha modificado su demo http://jsfiddle.net/hQAWv/. – druveen

+0

No es necesario utilizar 'onclick', puede agregar los argumentos específicos en data-attributes y obtenerlos de esa manera. – Mottie

+0

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

Cuestiones relacionadas