クリックハンドラーを定義したとします。
$("#foo").click(function(e){
});
関数ハンドラー内で、イベントがプログラムによって発生したのか、それともユーザーによって発生したのかをどのように確認できますか?
$x.click()
または$x.trigger('click')
。
クリックハンドラーを定義したとします。
$("#foo").click(function(e){
});
関数ハンドラー内で、イベントがプログラムによって発生したのか、それともユーザーによって発生したのかをどのように確認できますか?
$x.click()
または$x.trigger('click')
。
回答:
イベントオブジェクトを確認できますe
。イベントは、実際のクリックによってトリガされた場合は、次のようなものがあるでしょうclientX
、clientY
、pageX
、pageY
、などの内部をe
、彼らは数字になります。これらの番号は、クリックがトリガーされたときのマウスの位置に関連していますが、キーボードからクリックが開始された場合でもおそらく存在します。イベントがトリガーされた場合、$x.click()
では通常の位置の値は得られませんe
。originalEvent
プロパティを確認することもできます$x.click()
。これは、イベントがから発生した場合には表示されません。
多分このようなもの:
$("#foo").click(function(e){
if(e.hasOwnProperty('originalEvent'))
// Probably a real click.
else
// Probably a fake click.
});
そして、ここで遊ぶための小さなサンドボックスがあります:http : //jsfiddle.net/UtzND/
originalEvent
ますか?それは正しいことですか?どこかにコーディネートはありますか?座標は一貫していますか?座標は内側#foo
ですか?...
jQueryトリガーのマニュアルに記載されているように、追加のパラメーターを使用できます。
$("#foo").click(function(e, from){
if (from == null)
from = 'User';
// rest of your code
});
$('#foo').trigger('click', ['Trigger']);
$x.click()
、.click()
呼び出し側が明示的に、彼らはそれを偽造していることを伝える必要があります。これは、Kevin Owockiの状況に応じて、問題となる場合とされない場合があります。
$x.click()
eventHandlerであるユーザークリック(ユーザーのクリックの場合、「通常」である可能性があります)の違いがよくわかりません
すでに回答されている別の質問があります。
click()がマウスクリックか、コードによってトリガーされたかを検出するにはどうすればよいですか?
which
イベントオブジェクトのプロパティを使用します。undefined
コードによってトリガーされるイベント用である必要があります
$("#someElem").click(function(e) {
if (e.which) {
// Actually clicked
} else {
// Triggered by code
}
});
JsFiddleの例-http : //jsfiddle.net/interdream/frw8j/
それが役に立てば幸い!
select
与えるでしょうe.which==undefined
。
上記の解決策をすべて試しましたが、私の場合は何もうまくいきませんでした。以下の解決策は私のために働きました。それがあなたにも役立つことを願っています。
$(document).ready(function(){
//calling click event programmatically
$("#chk1").trigger("click");
});
$(document).on('click','input[type=checkbox]',function(e) {
if(e.originalEvent.isTrusted==true){
alert("human click");
}
else{
alert("programmatically click");
}
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js">
</script>
<input type="checkbox" id="chk1" name="chk1" >Chk1</input>
<input type="checkbox" id="chk2" name="chk2" >Chk2</input>
<input type="checkbox" id="chk3" name="chk3" >Chk3</input>
DOMレベル3はevent.isTrustedを指定します。これは現在、IE9 +とFirefoxでのみサポートされています(私のテストに基づきます。徹底的に調査していませんが)一部のブラウザーではオーバーライド可能であり、実際には(残念ながら)100%信頼できる状態ではないことも確認しました。
これは、IEとFirefoxで動作する@muのフィドルの修正バージョンです。
isTrusted
がサポートされており、書き込み可能でないかどうかを確認するには、いくつかのテストを組み合わせる必要があります。本当の答えは、この質問の背後にある理由に依存すると私は思います。