이벤트가 사람에 의해 트리거되는지 확인
이벤트에 처리기가 연결되어 있으며 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는 그 이후로 많은 변화를 겪었습니다.
For example event.originalEvent
returns always true
with jQuery 1.9.x. I mean object always exists but content is different.
Those who use newer versions of jQuery can try this one. Works on Chrome, Edge, IE, Opera, FF
if ((event.originalEvent.isTrusted === true && event.originalEvent.isPrimary === undefined) || event.originalEvent.isPrimary === true) {
//Hey hooman it is you
}
You can use onmousedown to detect mouse click vs trigger() call.
I would think about a possibility where you check the mouse position, like:
- Click
- Get mouse position
- Overlaps the coords of the button
- ...
Incase you have control of all your code, no alien calls $(input).focus()
than setFocus()
.
Use a global variable is a correct way for me.
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
If some alien still want to call $(input).focus()
from another planet. Good luck or check other answers
Currently most of browsers support event.isTrusted:
if (e.isTrusted) {
/* The event is trusted: event was generated by a user action */
} else {
/* The event is not trusted */
}
From docs:
The isTrusted read-only property of the
Event
interface is aBoolean
that is true when the event was generated by a user action, and false when the event was created or modified by a script or dispatched via EventTarget.dispatchEvent().
참고URL : https://stackoverflow.com/questions/6692031/check-if-event-is-triggered-by-a-human
'development' 카테고리의 다른 글
Docker 이미지 "레이어"란 무엇입니까? (0) | 2020.06.28 |
---|---|
500 내부 서버 오류가 발생하지 않고 PHP가 오류를 표시하도록하려면 어떻게해야합니까 (0) | 2020.06.28 |
자바 스크립트 정규식-대안을 보시겠습니까? (0) | 2020.06.28 |
Windows cmd 스크립트에서 여러 명령 실행 (0) | 2020.06.28 |
원격 SSH 세션에서 로컬 클립 보드로 데이터를 보내는 방법 (0) | 2020.06.28 |