2012-06-07 3 views
7

этот вопрос похож как In Jquery, how can I tell between a programatic and user click?Javascript/jquery, как различать триггер и щелчок пользователя?

Но я не могу получить его, мой код

<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") 
} 

по щелчку на div.sample_class я получаю в консоли Object неопределенными ложные

при нажатии div.tigger_class я получаю в консоли то же самое Объект undefined false

Я не могу отличить эти два клика. Заранее спасибо

+1

Тогда почему вы имитируете клик? Напишите новую функцию, которая не использует один и тот же код. Вы также можете прочитать [пространство имен событий] (http://docs.jquery.com/Namespaced_Events) или [пользовательские события] (http://corymathews.com/jquery-custom-events/), чтобы узнать, помогите вашей ситуации. – Blazemonger

+1

В вашем HTML есть 'onclick =" tigger_fn() ", а в Javascript есть функция' function trigget_fn() '- опечатки не помогут сделать что-либо работать. Если они не в вашем фактическом коде, они тоже не должны быть в вашем вопросе. –

+0

Ошибка здесь выпрямлена .....На самом деле это не в коде – druveen

ответ

6

UPDATE: На JQuery 1.7+, объект события (e в коде ниже) объект будет содержать свойство с именем e.isTrigger которое true, если событие было вызвано и неопределенным, если не срабатывает; это недокументировано, поэтому проверьте это (demo) перед его использованием. Если используется старая версия jQuery, используйте приведенный ниже код.


Возможно, будет проще передать флаг вашей функции. Вот 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); 
}); 

Update: данные-атрибуты могут содержать действительный JSON, который автоматически преобразуется в объект (demo):

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

Обратите внимание, что data-arg использует одиночную кавычку, чтобы содержать JSON, но JSON внутри ДОЛЖЕН использовать двойные кавычки вокруг каждой клавиши и значения (если это не числовое).

Затем с помощью метода данных для извлечения информации:

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

В качестве альтернативы, вы можете сделать отдельный данных-атрибут для каждого аргумента (demo):

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

Затем с помощью собрать все данные из элемента следующим образом:

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

Фактически функция onclick не привязана с помощью jquery. Так что это не помогает в моем случае изменили вашу демонстрацию http://jsfiddle.net/hQAWv/. – druveen

+0

Нет необходимости использовать 'onclick', вы можете добавить конкретные аргументы в атрибуты данных и получить их таким образом. – Mottie

+0

или [сделать это] (http://jsfiddle.net/Mottie/hQAWv/1/): 'function trigger_fn (e) {test_fn (e, true); } ' – Mottie