2017-10-13 12 views
2

포커스 이벤트가 사용자에 의해 (수동으로) 트리거 된 경우 검색하려고합니다.포커스 이벤트가 사용자/브라우저 또는 jQuery에 의해 트리거되었는지 감지

typeof event.originalEvent != "undefined" 

불행하게도, 그것은 초점 이벤트에 대한 서로 다른 동작 : 그것은 click 이벤트에 관해서 , event.originalEvent가있는 내부 핸들러 메소드 있는지 확인하는 것이 가능하다. example을 확인하십시오.

첫 번째 <input>을 클릭 한 다음 두 번째 입력에 대해 "트리거 클릭"버튼을 클릭하면 click undefined이 표시되며 이는 event.originalEvent이 없음을 의미합니다. 그런 다음 첫 번째 <input>을 클릭하고 두 번째 입력에 대한 "트리거 포커스"버튼을 클릭하면 focus object, event.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

경고, "클릭"액세스 만 잡을뿐 탭 키를 사용하여 필드로 점프하는 것을 고려하지 않습니다. –