2008-11-12 5 views

답변

46

textInput은 사용자가 입력란에 텍스트를 입력 한 경우에만 전달됩니다. 반면에 change은 사용자가 커밋 한 모든 변경 사항에 대해 전달됩니다. 예를 들어, 사용자가 텍스트의 일부를 삭제하면 change 이벤트 만 전달됩니다.

flash.events.TextEvent.TEXT_INPUT : 텍스트 코드를 통해 수정 될 때

이들 중 어느

가 전달됩니다. " 사용자 유형의 컨트롤에 텍스트를 삭제하거나 붙여 넣기 할 때 전달"

(단어가 "삭제"를 무시 - 난 그냥 시도와 텍스트가 사용자에 의해 삭제 될 때이 이벤트가 하지 파견입니다)

flash.events.Event.CHANGE :

"TextInput 컨트롤의 텍스트가 사용자 입력을 통해 변경 될 때 전달됩니다. 데이터 바인딩 또는 ActionScript를 사용하는 경우이 이벤트가 발생하지 않습니다. 코드를 변경하려면. "

때 필드 (일반적으로 텍스트 필드 밖으로 포커스를 이동하여) 변경,하지만이 이벤트도 전달됩니다 기억 또한 사용자가 "커밋"할 때 전달되는 valueCommit 이벤트를 사용할 수 있습니다 값은 프로그래밍 방식으로 변경됩니다.

+2

답을 명확히 해 주셔서 감사합니다. 참고 사항 : 나는 몇 가지 테스트를 수행하고'text.currentTarget.text'를 사용하여'textInput' 이벤트에 대한 이벤트 처리기의'text' 속성에 액세스 할 때 값이' text'_efore 이벤트를 트리거 한 키 누르기 이전. –

+0

그건 나에게 사실이 아니에요, 적어도 Flex 4.5에서는 (나는 Flex 4도 같음) spark TextInput을 사용하지 않았습니다. 변경 이벤트에서 마지막 텍스트 값을 얻습니다. 이전에 변경 이벤트도 전달됩니다. – Enrique

3

대단한 대답은 hasseg입니다. 담당자가 충분하다면 투표 할 수 있습니다.

사용자 입력을 캡처하는 대상에 따라 TextInput 구성 요소를 서브 클래스로 만들고 change 및 textInput 이벤트에 대한 내부 수신기를 재정의 할 수 있습니다.

당신이 이것을하고 싶어하는 이유가 많이 있는지는 모르겠지만 최근에 붙여 넣은 라인 브레이크가 '\ r'으로 나타나게하는 OS X의 버그를 다루기 위해 했었습니다. '\ n'대신.

this.addEventListener(Event.CHANGE, textFieldChangeListener); 
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener); 

을 그리고 청취자 방법과 실행하려는 코드를 추가 :

당신이해야 할 모든 당신의 서브 클래스 개체의 생성자에서 다음과 같은 수퍼 후() 호출을 추가합니다.

0

입력 된 각 문자에 대해 Event.CHANGE 및 TextEvent.TEXT_INPUT 이벤트가 트리거됩니다. 주어진 TextInput 필드에 대해 한 번만 트리거하는 이벤트가 필요하면 FocusEvent.FOCUS_OUT을 사용하십시오.

같은 이벤트 .CHANGE 및 TextEvent.TEXT_INPUT,이 이벤트는 프로그래밍 방식으로 값을 변경하는 것이 아니라 사용자 입력에 대해서만 트리거합니다. TEXT_INPUTKEY_DOWN 할 -

+1

FOCUS_OUT을 사용하면 필드 당 한 번만 트리거된다는 것은 사실이지만 사용자가 값을 변경했는지 여부를 알 수 없으므로 FOCUS_OUT을 사용하여이를 수행 한 것이 실현되지 않았다는 것을 깨달았습니다. – hrabinowitz

+0

위의 hasseg 노트처럼 CHANGE가 TextInput 필드에 대한 사용자 변경 사항을 청취하는 가장 좋은 선택 인 것으로 보입니다. 그러나 사용자가 control-C를 입력하여 필드 값을 복사하면 CHANGE 이벤트도 트리거됩니다. – hrabinowitz

0

CHANGE 나던 당신에게 생각의 변경 사항을을 말한다.

+0

그러나 최종 결과를 사용해야 할 경우 CHANGE 이벤트를 처리 할 때 TextInput에서 전체 텍스트를 가져올 수 있습니다. –

관련 문제