programing

이벤트가 사람에 의해 트리거되었는지 확인합니다.

telecom 2023. 10. 27. 21:43
반응형

이벤트가 사람에 의해 트리거되었는지 확인합니다.

이벤트에 핸들러가 연결되어 있는데 트리거() 방식이 아닌 사람에 의해 트리거된 경우에만 실행했으면 합니다.어떻게 차이를 구분할 수 있습니까?

예를들면,

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

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

확인 가능합니다.e.originalEvent: 정의된 경우 클릭은 인간입니다.

fiddle 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

현재 대부분의 브라우저에서 event.istrusted를 지원합니다.

if (e.isTrusted) {
  /* The event is trusted: event was generated by a user action */
} else {
  /* The event is not trusted */
}

문서에서:

는 의 Trusted Read-Only 속성입니다.Event인터페이스는 a.Boolean이벤트가 사용자 작업에 의해 생성된 경우 true이고, 이벤트가 스크립트에 의해 생성되거나 수정되거나 EventTarget.dispatchEvent()를 통해 dispatch된 경우 false입니다.

이것을 할 수 있는 유일한 방법은 추가적인 매개변수를 전달하는 것입니다.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항상반품truejQuery 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
}

당신이 모든 코드를 통제할 수 있는 경우, 외계인의 전화는 없습니다.$(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()다른 행성에서 왔습니다행운을 빌거나 다른 대답을 확인합니다.

전화가 오는지 알고 싶어요oninput입력 값이 복원될 때 실행 취소/redo가 입력 이벤트로 이어지므로 핸들러가 사용자로부터 오거나 실행 취소/redo에서 오거나 합니다.

  valueInput.oninput = (e) => {
    const value = +valueInput.value
    update(value)
    if (!e.inputType.startsWith("history")) {
      console.log('came from human')
      save(value)
    }
    else {
      console.log('came from history stacks')
    }
  }

알고보니.e.inputType"historyUndo"미해결 상태에서"historyRedo"redo(가능한 inputType 목록 참조).

온 마우스 다운을 사용하여 마우스 클릭 vs trigger() 호출을 감지할 수 있습니다.

마우스 위치를 확인할 수 있는 가능성을 생각해 보겠습니다.

  • 클릭
  • 마우스 위치 가져오기
  • 단추의 좌표를 겹칩니다.
  • ...

언급URL : https://stackoverflow.com/questions/6692031/check-if-event-is-triggered-by-a-human

반응형