2017-10-13 8 views
2

フォーカスイベントがユーザーによって(手動で)トリガされたかどうかを検出しようとしています。フォーカスイベントがユーザー/ブラウザまたはjQueryによってトリガされたかどうかを検出します。

typeof event.originalEvent != "undefined" 

残念ながら、それはフォーカスイベントのために異なる動作します。それはclickイベントに来るとき は、event.originalEventが現在の内部ハンドラメソッドであるかどうかを確認することが可能です。 exampleをご確認ください。

最初の<input>をクリックし、次に2番目の入力の「トリガークリック」ボタンをクリックすると、が存在しないことを意味するclick undefinedが表示されます。 次に、最初の<input>をクリックしてから、2番目の入力の「トリガーフォーカス」ボタンをクリックすると、focus objectevent.originalEventが表示されます。

  • フォーカスイベントがユーザーによって(プログラムではなく)トリガーされたかどうかを検出する方法はありますか。
+0

これ多分便利:https://stackoverflow.com/questions/5653332/differentiate-between-キーボードによるフォーカスイベントトリガー – Nayish

+0

特別なイベントを使用できますか? 'blur'のエイリアスとして' custom_blur'を使用していますか? – Martijn

+1

クロム(他のブラウザではテストされていません)では、 "event.originalEvent.sourceCapabilities"はスクリプトからトリガされたときにnullです。 –

答えて

1

それはユーザーのアクションやないかどうかを確認するためにmousedownイベントを適用します。

$(document).ready(function() { 
 

 
    var isUserClick = false; 
 
    $("input").mousedown(function() { 
 
    isUserClick = true; 
 
    }); 
 
    $("input").on("click focus blur", function(event) { 
 
    console.log(event.type, typeof event.originalEvent, isUserClick ? 'user' : 'script'); 
 
    setTimeout(function() { 
 
     isUserClick = false; 
 
    }, 200); 
 
    }); 
 
    $("button").click(function() { 
 
    $("input." + $(this).attr("class")).trigger($(this).data("event")); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
FIRST: 
 
<input class="first" /> 
 
<button class="first" data-event="click">trigger click</button> 
 
<button class="first" data-event="focus">trigger focus</button> 
 
<button class="first" data-event="blur">trigger blur</button> 
 
<br> 
 
<br> SECOND: 
 
<input class="second" /> 
 
<button class="second" data-event="click">trigger click</button> 
 
<button class="second" data-event="focus">trigger focus</button> 
 
<button class="second" data-event="blur">trigger blur</button> 
 
<br>

+1

警告、「クリック」アクセスのみがキャッチされますが、タブキーを使用してフィールドにジャンプすることは考慮されていません。 –

関連する問題