2010-02-28 10 views
5

IE에서 선택 메뉴의 변경 사항에 사용되는 프로토 타입 이벤트 수신기가 IE에서 트리거되지 않습니다.IE에서 '변경'이벤트가 트리거되지 않음

Event.observe('use_billing', 'change', Checkout.getBillingData); 

이 파이어 폭스에서 잘 작동 (물론),하지만 아무것도 (물론) IE에서 발생하지 않습니다 - 나는 약간의 시간이 인터넷 검색을 봤는데,하지만이 문제에 대한 적절한 해결책을 발견하지 않았습니다. 문제가 있다는 것을 알았지 만, 문제를 우회하여이를 작동시키는 데 도움이되는 어떤 것도 발견하지 못했습니다.

정말 그들이 강요하기 때문에, 인라인 이벤트 트리거를 사용하지 않도록하고 오류가 발생하기 쉬운 지저분한 문서 만들기 위해 노력하고

:

<select id='use_billing' onchange="Checkout.getBillingData();">....</select> 

어떤 아이디어가 좋은 것 -이이 프로젝트를 중지하는 유일한 일 베타에서 생산에 이르기까지.

답변

2

그 이유는 - 포커스 문제가 아니었기 때문에 폼 요소의 이름과 id 값이 같았다는 것을 알았습니다. id 값을 변경했는데 모든 것이 잘 작동했습니다.

3

이것은 IE의 일반적인 문제입니다. 요소가 포커스를 잃을 때까지 change 이벤트가 발생하지 않습니다.

이것이 실제로 문제의 원인인지 확인하려면 메뉴를 변경 한 다음 Tab 키를 눌러 다른 요소로 포커스를 이동하십시오. 콜백이 제대로 실행되면 다른 문제가 없음을 알 수 있습니다.

나는 전에 click 또는 keydown과 같은 다른 이벤트를 듣고이 문제를 해결했습니다. 콜백에 수표를 추가하여 값이 실제로는 이전과 다른지 확인하여 필요한 것보다 더 많은 시간을 처리하지 않도록 할 수 있습니다 (다른 브라우저에서는 클릭 할 때 clickchange을 동시에 실행하기 때문에) 새로운 가치).

2

나는 이것이 오래된 주제라는 것을 알고 있지만 위의 대안에 대한 답을 나누고 싶었습니다. 내 코드에서 요소의 이름과 ID는 동일하지만 중요하지 않습니다.

발생하는 함수에서 이벤트 인수가 프로토 타입에서 전달되었습니다. 텍스트 상자의 값을 얻으려면 파이어 폭스에서 당신이

eventArg.currentTarget.value를 사용하지만 당신이 사용해야 두 브라우저에서 작동하는 IE 당신이 순서에 따라서 eventArg.srcElement.value

를 사용해야합니다 (즉, 이벤트를 발생) ...

var value = "";
var id = "";
if(eventArg.currentTarget){//FireFox
value = eventArg.currentTarget.value;
id = eventArg.currentTarget.id;
}
else{//IE
value = eventArg.srcElement.value;
id = eventArg.srcElement.id;

}

관련 문제