JavaScript에서 이벤트 처리를 사용하려고합니다. 이것이 내가 지금까지 가지고있는 것입니다 :프로토 타입 상속을 사용하여 자바 스크립트에서 이벤트 처리
그러나 어떤 이유로 든 모든 이벤트가 동시에 트리거됩니다. 예를 들어, Click 이벤트 트리거링 대신 Form의 Title 필드를 클릭하면 네 개의 이벤트가 모두 트리거됩니다.
내가 뭘 잘못하고 있니?
JavaScript에서 이벤트 처리를 사용하려고합니다. 이것이 내가 지금까지 가지고있는 것입니다 :프로토 타입 상속을 사용하여 자바 스크립트에서 이벤트 처리
그러나 어떤 이유로 든 모든 이벤트가 동시에 트리거됩니다. 예를 들어, Click 이벤트 트리거링 대신 Form의 Title 필드를 클릭하면 네 개의 이벤트가 모두 트리거됩니다.
내가 뭘 잘못하고 있니?
귀하의 switch
문이 일부 break
문을 누락하므로, click
의 경우 4 가지 방법이 모두 실행됩니다.
Field.prototype.handleEvent = function(event) {
var prop = event.type;
if (prop in this) // && typeof this[prop] == "function"
this[prop](this.value);
};
명시 적으로 언급하지 않고 모든 이벤트에 대해 작동합니다
그러나, switch
-statement보다 더 나은 옵션이있다.
네, 매력처럼 작동했습니다. 그런데 왜 'onblur'이벤트가 발생하지 않는지 아시겠습니까? – user
@user : 이벤트의 이름이'blur'이기 때문에 :-)'on' 접두사는 M $'.attachEvent'와 event-properties에만 해당합니다. – Bergi
감사합니다. Derija93은 똑같은 제안과 흐림 효과를 제안했습니다. 그러나 처음에는 필드에 집중할 때를 포함하여 여러 번 트리거되는 것처럼 보입니다. 또한 창을 전환 할 때 트리거됩니다. 내가 어떻게 고칠 수 있는지 아십니까? 그건 그렇고, 이벤트 핸들링에 대한이 접근 방식이 좋은가요? 너는 전문가이기 때문에 내가 물어볼 줄 알았다. :) – user
심플. case
블록이 끝날 때마다 break;
문을 사용하여 모든 블록과 구분하십시오.
귀하의 대답은 정확합니다. 내가 뭘 생각하는지 모르겠다! 그러나 Bergi 's는 switch 문보다 더 우아 해 보입니다. 그래서 저는 그것을 대답으로 선택했습니다. 그건 그렇고, 왜 'onblur'이벤트가 발생하지 않을지 아시나요? – user
@user 아마도 리스너를 사용하여 등록 할 때 'on'을 생략하기 때문일 수 있습니다. 그래서'addEventListener ('blur', ...); 만 시도해보십시오. – Kiruse
그래야 흐림 효과가 있습니다. 그러나 마지막 질문. 그것 (흐림)은 내가 필드에 처음으로 집중했을 때를 포함하여 여러 번 트리거되는 것처럼 보입니다. 또한 창을 전환 할 때 트리거됩니다. 그 해결책을 알고 있습니까? – user
switch 문에 각 경우마다 break
이 있어야합니다.
switch (event.type) {
case "click": this.click(this.value); break;
case "onblur": this.onblur(this.value); break;
case "change": this.change(this.value); break;
case "dblclick": this.dblclick(this.value); break;
}
마지막 휴식은 필요하지 않지만 추가 사례를 추가 할 수 있으므로 포함하는 것이 좋습니다.
Bergi의 해결책은 매우 정교합니다. 감사! – user
'this.elem.addEventListener ('...', this, false);'이벤트 리스너로 오브젝트 인'Field' 인스턴스를 첨부합니까 - 함수 여야합니까? – Bergi