이벤트가 사람에 의해 트리거되었는지 확인합니다.
이벤트에 핸들러가 연결되어 있는데 트리거() 방식이 아닌 사람에 의해 트리거된 경우에만 실행했으면 합니다.어떻게 차이를 구분할 수 있습니까?
예를들면,
$('.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
항상반품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
}
당신이 모든 코드를 통제할 수 있는 경우, 외계인의 전화는 없습니다.$(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
'programing' 카테고리의 다른 글
"pre_option_upload_url_path" WordPress 4.7에서 필터가 더 이상 점화되지 않습니다. (0) | 2023.10.27 |
---|---|
AngularJs 유닛 테스트 메모리 누수 (0) | 2023.10.27 |
C/C++에서 (식이) 진행되는 동안 세미콜론이 필요한 이유는 무엇입니까? (0) | 2023.10.22 |
Chrome 브라우저로 재생되지 않는 MP4 HEVC 비디오 (0) | 2023.10.22 |
XPath를 사용하여 특성 가져오기 (0) | 2023.10.22 |