2012-06-07 16 views
7

div.sample_class上のクリックで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") 
} 

iは、コンソールに 未定義 偽 オブジェクトを取得しています私のコード、この質問は In Jquery, how can I tell between a programatic and user click?

のような似ていますが、私はそれを取得することはできませんよ

クリックするとdiv.tigger_classが表示されます同じコンソールに入っています オブジェクト 未定義 false

これらの2回のクリックを区別することはできません。 事前のおかげでは

+1

なぜクリックをシミュレートしていますか?同じコードを共有しない新しい関数を書く。また、[イベントネームスペース](http://docs.jquery.com/Namespaced_Events)または[カスタムイベント](http://corymathews.com/jquery-custom-events/)を参照して、あなたの状況を助けてください。 – Blazemonger

+1

HTMLには 'onclick =" tigger_fn() "'があり、Javascriptには 'trigget_fn()'関数があります。彼らがあなたの実際のコードに含まれていない場合、彼らはあなたの質問にもなるべきではありません。 –

+0

タイプミスがここで修正されました.....実際にはコード内にはありません – druveen

答えて

6

UPDATE:jQueryの1.7以上のように、イベントオブジェクト(下記のコードでe)オブジェクトは、イベントがトリガされ、未定義な​​らないトリガされた場合trueあるe.isTriggerという名前のプロパティを含むことになります。これは文書化されていないので、使用する前にこれを確認してください(demo)。古いバージョンのjQueryを使用している場合は、以下のコードを使用してください。


フラグを関数に渡すほうが簡単かもしれません。ここでdemoです:

HTML

<button>Trigger a click below</button> 

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

スクリプト

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

更新:データの属性が自動的にオブジェクトに変換され、有効な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

実際には、jcleryを使用してonclick関数がバインドされていません。だから私のケースでは、このヘルプはあなたのデモhttp://jsfiddle.net/hQAWv/を変更していません。 – druveen

+0

'onclick'を使用する必要はありません。特定の引数をデータ属性に追加し、そのように取得できます。 – Mottie

+0

または[これを行う](http://jsfiddle.net/Mottie/hQAWv/1/): 'function trigger_fn(e){test_fn(e、true); } ' – Mottie

関連する問題