回答:
あなたはチェックすることができますe.originalEvent
:それが定義されている場合、クリックは人間です:
フィドルを見てくださいhttp://jsfiddle.net/Uf8Wv/
$('.checkbox').change(function(e){
if (e.originalEvent !== undefined)
{
alert ('human');
}
});
フィドルの私の例:
<input type='checkbox' id='try' >try
<button id='click'>Click</button>
$("#try").click(function(event) {
if (event.originalEvent === undefined) {
alert('not human')
} else {
alert(' human');
}
});
$('#click').click(function(event) {
$("#try").click();
});
:)
event.isTrigger
originalEvent
イベントがによってトリガーされたときにjQueryにデータが読み込まれるように見えDOM.click()
ますが$($("#try")[0]).click();
、を使用できます。
上記よりも簡単です:
$('.checkbox').change(function(e){
if (e.isTrigger)
{
alert ('not a human');
}
});
$('.checkbox').trigger('change'); //doesn't alert
これを行う唯一の方法trigger
は、ドキュメントのとおり、呼び出しで追加のパラメーターを渡すことだと思います。
$('.checkbox').change(function(e, isTriggered){
if (!isTriggered)
{
alert ('human');
}
});
$('.checkbox').trigger('change', [true]); //doesn't alert
受け入れられた答えは私にとってはうまくいきませんでした。それから6年が経過し、それ以来jQueryは大きく変化しました。
たとえば、jQuery 1.9.xではevent.originalEvent
常に戻ります。true
オブジェクトは常に存在しますが、内容は異なります。
jQueryの新しいバージョンを使用している人は、これを試すことができます。Chrome、Edge、IE、Opera、FFで動作します
if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) {
//Hey hooman it is you
}
現在、ほとんどのブラウザーはevent.isTrustedをサポートしています。
if (e.isTrusted) {
/* The event is trusted: event was generated by a user action */
} else {
/* The event is not trusted */
}
ドキュメントから:
インターフェイスのisTrusted読み取り専用プロパティは、イベントがユーザーアクションによって生成された場合 はtrue 、スクリプトによってイベントが作成または変更された場合、またはEventTarget.dispatchEvent()を介してディスパッチされた場合は falseです。
Event
Boolean
onmousedownを使用して、マウスクリックとtrigger()呼び出しを検出できます。
次のように、マウスの位置を確認する可能性について考えます。
すべてのコードを制御できる場合は、$(input).focus()
以外のエイリアンコールはありませんsetFocus()
。
グローバル変数を使用するのが正しい方法です。
var globalIsHuman = true;
$('input').on('focus', function (){
if(globalIsHuman){
console.log('hello human, come and give me a hug');
}else{
console.log('alien, get away, i hate you..');
}
globalIsHuman = true;
});
// alien set focus
function setFocus(){
globalIsHuman = false;
$('input').focus();
}
// human use mouse, finger, foot... whatever to touch the input
一部のエイリアンがまだ$(input).focus()
別の惑星から電話をかけたい場合。幸運を祈るか、他の答えを確認してください
setFocus()
-それは人々がフォーカスイベントをトリガーすることを防ぎません。setFocus()
何も書かないことはまた、人々がそれを呼ぶことを妨げるでしょう、それで私は利益を見ません。実際、人々はまだ電話$('input').focus()
してそれを通過させることができました。
(function(){/*your code here*/})();
これにより、setFocus関数が呼び出されないようにし、ブール値が外部スクリプトによって変更されないようにします。