2012-09-14 5 views
0

mxml 파일의 세 필드에서 유효성 검사를 시도하고 있습니다. 그 중 2 개는 필수이고 하나는 필요하지 않습니다. 우편 번호 필드는 무언가가 입력되면 유효성을 검사하기를 원합니다. 비어있는 경우 다른 두 필수 입력란이 올바르게 설정되어있는 한 '제출'버튼을 사용하도록 허용하고 싶습니다. 코드 :플렉스 조건부 유효성 검사

<mx:EmailValidator id="emailValidator" 
         property="text" source="{ownerName}" 
         valid="emailValidator_validHandler(event)" 
         invalid="emailValidator_validHandler(event)"/> 
    <mx:ZipCodeValidator id="zipCodeValidator" 
         property="text" source="{zip}" 
         required="false" 
         valid="zipCodeValidator_validHandler(event)" 
         invalid="zipCodeValidator_validHandler(event)"/> 

    <mx:Validator id="roomNameValidator" 
        property="text" source="{roomName}" 
        valid="roomNameValidator_validHandler(event)" 
        invalid="roomNameValidator_validHandler(event)"/> 
     [Bindable] 
     private var isRoomNameValid:Boolean; 
     [Bindable] 
     private var isOwnerValid:Boolean; 
     [Bindable] 
     private var isZipValid:Boolean; 

     protected function emailValidator_validHandler(event:ValidationResultEvent):void 
     { 
      isOwnerValid = (event.type==ValidationResultEvent.VALID); 
     } 

     protected function zipCodeValidator_validHandler(event:ValidationResultEvent):void 
     { 
      isZipValid = (event.type == ValidationResultEvent.VALID); 
     } 
     protected function roomNameValidator_validHandler(event:ValidationResultEvent):void 
     { 
      isRoomNameValid = (event.type==ValidationResultEvent.VALID); 
     } 

난 후 제출 버튼의 enabled 속성을 설정하려고 :

enabled = "{isOwnerValid &amp;&amp; isRoomNameValid &amp;&amp zip.text.length>0?isZipValid:true}" 

을하지만 그것은 작동하지 않습니다. 우편 번호 입력란에 빨간색 테두리가 표시 되어도 우편 번호 필드에 잘못된 데이터를 제출할 수 있습니다.

답변

0

이 질문에 대한 답변을 제공하지 않지만 일부 유형의 MVC 사용을 심각하게 고려할 수도 있습니다. 활성화 된 함수의 모든 논리에는 코드 냄새가 있습니다.

0

편집 :로,

protected function changeHandler(event:Event):void 
{ 
    submitButton.enabled = Validator.validateAll(validators.source); 
} 

<mx:ArrayCollection id="validators"> 
    <mx:EmailValidator id="emailValidator" 
        property="text" source="{ownerName}" />     
    <mx:ZipCodeValidator id="zipCodeValidator" 
        property="text" source="{zip}" 
        required="false" /> 
    <mx:Validator id="roomNameValidator" 
        property="text" source="{roomName}" /> 
</mx:ArrayCollection> 

<mx:Label text="Owner Name:" /> 
<mx:TextInput id="ownerName" change="changeHandler(event)" /> 
<mx:Label text="Zip Code:" /> 
<mx:TextInput id="zip" change="changeHandler(event)" /> 
<mx:Label text="Room Name:" /> 
<mx:TextInput id="roomName" change="changeHandler(event)" /> 
<mx:Button id="submitButton" label="Submit" enabled="false" /> 
+0

안녕하세요 Trish. 답변 해주셔서 감사합니다. 나는 코드를 시도했지만 빨간색 윤곽선이 우편 번호 상자 주위에 나타나더라도 여전히 나쁜 데이터를 제출할 수 있습니다. – David

0

첫째 : 내 이전의 제안은 내가 다음과 같이 유효성 검사를 수행하려면 텍스트 상자의 변경 방법을 사용하는 것이 좋습니다 것

:-) 무한 루프 보였습니다 우편 번호는 필수가 아니므로 true으로 초기화해야합니다.

[Bindable] var isZipValid : Boolean = true; 대안 솔루션이 될 것

enabled = "{isOwnerValid && isRoomNameValid && isZipValid}" 

당신의 다음

protected function zipCodeValidator_validHandler(event:ValidationResultEvent):void 
{ 
    isZipValid = (zip.text.length == 0) || (event.type == ValidationResultEvent.VALID); 
} 

제출 버튼 :


지금 여기에 솔루션입니다 발리 자체에만 우편으로 가능 우편 번호는 비 구별 적이 아니며, 사실로 초기화해야합니다 :

<mx:ZipCodeValidator id="zipCodeValidator" 
       property="text" source="{zip}" 
       required="false" 
       valid="zipCodeValidator_validHandler(event)" 
       invalid="zipCodeValidator_validHandler(event)" 
       enabled="{zip.text.length > 0}"/> 

[Bindable] var isZipValid : Boolean = true;

+0

이 코드를 사용해 보았습니다. 오류 메시지가 표시 되더라도 받아 들일 수없는 우편 번호를 제출할 수 있습니다. 커스텀 클래스를 작성해야 할 것 같습니다. 성공하면 여기에 게시 할 것입니다. – David

관련 문제