2011-08-08 4 views
3

は、私たちのすべては、あなたがこれらのいずれかの方法を使用して要素をクリックするか、他のイベントをシミュレートすることができることを知っている:JavaScriptまたはjQueryのソースをクリックすると、人間または自動?

$('#targetElement').trigger('eventName'); 
$('#targetElement').click(); 

は、私は、私は要素がクリックされた方法を知っているべき事態に遭遇しました。私はそれがコードを介して自動的にクリックされたか、またはマウスボタンを押すことによって知るべきです。とにかく私はハックや回避策なしでそれを行うことができますか?つまり、人間の行動やコードによってクリックが開始されたかどうかを示すことができるブラウザのイベントオブジェクト、JavaScript、またはjQueryには何かが組み込まれていますか?

+0

が重複する可能性を[与えられたJavaScriptアクションは、ユーザによって開始されたかどうかを確認](http://stackoverflow.com/questions/5948350/determine-whether-a-given -javascript-action-has-been-by-user) – alex

答えて

6

この試してみてください。この作業を行うために、次に

$('#targetElement').click(function(event, generated) { 
    if (generated) { 
     // Event was generated by code, not a user click. 
    } else { 
     // Event was generated by a user click. 
    } 
}); 

を、あなたはこのようにそれらをトリガーする必要があります。

$('#targetElement').trigger('click', [true]); 

this jsfiddleを参照してください。

+0

ありがとう@cdhowie、しかしこれは回避策です。私はすでにそれを知っていました。私はそこに組み込みの方法があるかどうかを知ろうとしています。 –

3

event.whichをチェックすると、コードでトリガーされた場合はundefinedになります。

$(document).click(function(event) { 
    if (event.which) { 
     // Triggered by the event. 
    } else { 
     // Triggered with code. 
    } 
}); 

jsFiddle

+0

が間違っています。これはjQueryオブジェクトです。要素は '$( '#elementId')。click()'を使用してjQueryでクリックされました。 –

+0

Chromeでテストしたところ、 'if(event.srcElement) 'を使って実際に運が良かった –

+0

@ josh.trow:Firefoxで試したところ、そのイベントプロパティをサポートしていないようです。 : – cdhowie

-5

即時イベントハンドラでは、eパラメータを指定します。クリックは、(コード経由で)自動化されている場合は、この電子は(@alexが言ったようにe.targetチェックする必要が)未定義ないであろう。

$('#targetElement').click(function(e){ 
    if(e) 
    { 
     // Click is triggered by a human action 
    } 
    else 
    { 
    // Click is triggered via code 
    } 
}); 
+1

テストしても気になりませんでしたか?これは動作しません - http://jsfiddle.net/ZPD8w/ –

+0

を参照してくださいFirefoxで動作しません。イベント引数が提供されます。 – cdhowie

+0

私は私のために働いた。 @joshの例とは何が違うのか分かりません。しかし私の場合、それは働いた。しかし、私はこのポストを私の答えとしています。 –

2

ここで私が見つけた一つの方法(Chromeでテストした)

です
$('#foo').click(function(e) { 
    if (e.originalEvent) 
     alert('Has e (manual click)'); 
    else 
     alert('No e (triggered)'); 
}); 

は、テストのためにここを参照してください:のhttp://jsfiddle.net/ZPD8w/2/

+0

Firefoxで動作します。 – cdhowie

関連する問題