어제 셋톱박스 EPG 페이지를 수정하다가 작은 문제가 발생했습니다. 사용자가 게임을 구매할 때 구매 확인 대화 상자가 팝업되어야 합니다. 대화 상자의 기본 초점은 "취소" 버튼에 있어야 합니다. JavaScript의 focus() 메서드를 사용하면 매우 간단한 요구 사항을 달성할 수 있습니다. 간단한 코드 예시는 다음과 같습니다.
document.getElementById("cancel").focus()
그런데 슬픈 점은 셋톱박스가 정말 큰 구덩이라는 점입니다. 기존의 모든 셋톱박스 모델과 호환되어야 하기 때문에 8개의 셋톱박스를 적응시켜야 합니다. 그러다가 뭔가 잘못됐어요! ZTE B600 셋톱박스는 취소 버튼에 초점을 전혀 맞출 수 없습니다. 내 솔루션은 다음과 같습니다.
먼저 셋톱 박스가 getElementById() 메소드를 지원하는지, ID가 "cancel"인 요소가 성공적으로 획득되었는지 확인하십시오. 테스트 방법은 매우 간단합니다. 다른 e9f9b27494a520ba8f3cfa6795136eeftest94b3e26ee717c64999d7867364b1b4a3 그런 다음 동일한 위치에서 ID가 "test"인 요소를 가져오고 간단한 작업을 수행합니다. document.getElementById("test").innerHTML="Hello"
마지막으로 "try...catch(e)..."를 사용하여 "focus()"가 실패한 이유를 파악했습니다.
try(){ <span style="white-space:pre"> </span>document.getElementById("cancel").focus() }catch(e){ <span style="white-space:pre"> </span>alert(e.name + ": " + e.what()); }
그런데 좀 이상하네요! 위 두 단계의 결과를 보면 셋톱박스는 focus()와 getElementById()를 지원하지만 팝업 대화 상자에는 포커스를 설정할 수 없음을 알 수 있습니다.
한 시간 넘게 고생한 끝에 드디어 빅보스가 등장하고 단 한 문장으로 문제를 해결했습니다! 원래 포커스를 취소하려면 flur()를 적극적으로 호출하는 것이 가능합니다!
document.getElementById("purchase").flur()
그러면 문제가 해결됩니다. 감사해야 해요! 이 문제를 해결하는 과정에서 내 생각은 실제로 꽤 맞았지만 분명히 내 지식이 부족했다. 일반 프로그래머와 시니어 프로그래머의 격차는 문제 해결 아이디어뿐만 아니라 경험과 지식에서도 나타납니다!