주요 이벤트(Flex)를 수신할 수 있도록 프로그래밍 방식으로 HorizonList에 포커스를 설정하는 방법은 무엇입니까?
-
06-07-2019 - |
문제
코드를 살펴보십시오.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:creationComplete>
<![CDATA[
list.setFocus();
]]>
</mx:creationComplete>
<mx:HorizontalList id="list">
<mx:creationComplete>
<![CDATA[
setFocus();
]]>
</mx:creationComplete>
<mx:focusIn>
<![CDATA[
trace("Received focus");
]]>
</mx:focusIn>
<mx:keyDown>
<![CDATA[
trace("Key down");
]]>
</mx:keyDown>
<mx:dataProvider>
<mx:Object label="Some"/>
<mx:Object label="Different"/>
<mx:Object label="Stuff"/>
</mx:dataProvider>
</mx:HorizontalList>
보시다시피 나는 내 것을 만들려고 노력합니다 HorizontalList
애플리케이션이 로드될 때 집중됩니다.그리고 실제로 받아요 Received focus
콘솔의 메시지.하지만 포커스를 설정한 후 화살표 키를 사용하여 목록 요소를 탐색할 수 있을 것으로 기대했습니다.하지만 그렇지 않습니다.마우스로 컴포넌트를 클릭한 후에만 작동합니다.그럼 내가 뭘 잘못하고 있는 걸까요?목록에 초점을 맞추고 화살표 키에 응답하는 방법은 무엇입니까?
해결책
앱이 브라우저 내에서 실행되고 있나요?개체를 먼저 클릭하지 않고 SWF 개체와 상호 작용을 시작하려면 SWF 개체에 포커스를 설정해야 할 수도 있습니다(JavaScript를 통해).
예를 들어 Flex Builder를 사용한다고 가정하면 index.template.html 파일의 SCRIPT 태그 끝에 다음과 같은 줄을 추가해 보세요.
window.onload = function()
{
document.getElementById("${application}").focus();
};
특정 상황에 따라 약간의 조정이 필요할 수도 있지만 그게 문제일 수 있습니다.Flash 개체에 초점을 명시적으로 설정하면 문제가 해결됩니다.도움이 되길 바랍니다!
다른 팁
귀하의 코드를 실행하고 키보드로 목록을 탐색할 수 있었습니다 목록을 클릭하지 않고 먼저 - 하지만 난 Flex 앱의 아무 곳이나 클릭해야 했습니다. 그래서 우선적으로 초점을 받습니다.나는 이것이 일반적으로 플래시의 한계라고 생각합니다. SWF는 아무 곳이나 클릭하지 않는 한 키보드 포커스를 받지 못합니다(그래도 mouseOver는 여전히 실행됩니다).