[javascript] 이벤트가 사람에 의해 트리거되는지 확인

이벤트에 처리기가 첨부되어 있으며 trigger () 메서드가 아닌 사람이 트리거하는 경우에만 실행하고 싶습니다. 차이점을 어떻게 알 수 있습니까?

예를 들어

$('.checkbox').change(function(e){
  if (e.isHuman())
  {
    alert ('human');
  }
});

$('.checkbox').trigger('change'); //doesn't alert



답변

당신은 확인할 수 있습니다 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();
});


답변

위보다 더 똑바로 :

$('.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

예 : http://jsfiddle.net/wG2KY/


답변

수락 된 답변이 효과가 없었습니다. 6 년이 지났으며 jQuery는 그 이후로 많은 변화를 겪었습니다.

예를 들어 event.originalEvent항상 반환true jQuery 1.9.x객체는 항상 존재하지만 내용이 다릅니다.

최신 버전의 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은 읽기 전용의 속성 Event인터페이스이다 Boolean
하다 사실 이 이벤트는 사용자 동작에 의해 생성 한 때 오류
이벤트가 생성 또는 수정 된 스크립트 또는 통해 전달 될 때
EventTarget.dispatchEvent () .


답변

onmousedown을 사용하여 마우스 클릭과 트리거 () 호출을 감지 할 수 있습니다.


답변

마우스 위치를 확인할 수있는 가능성에 대해 생각합니다.

  • 딸깍 하는 소리
  • 마우스 위치 확보
  • 버튼의 좌표를 겹칩니다