2009-03-18 16 views
0

Flash(AS3)Iamは、「送信ボタン」と「リセットボタン」を1つ、入力テキストフィールドを4つ、 「名前、電子メール、件名、メッセージ」という連絡フォームを作成しています。インスタンス名が "contact_name、contact_email、contact_subject、contact_message"フラッシュ連絡先フォームの問題

IamはsetFocusとkillFocusについて非常に混乱しています。 AS3では

私はこのファイルをパブリッシュするとき、私は、入力テキストフィールドがテキスト 「名前、電子メール、サブ、メッセージ」

を示しbydefault今私の要件があり、今

contact_name.text = "Name"; 
contact_email.text= "Email"; 
contact_subject.text = "Sub"; 
contact_message.text = "Message"; 

を与えています「名前」フィールドをクリックするとテキスト「名前」が消えて自分の名前を入力できるようになります。その後、電子メールフィールドをクリックします。 テキスト「電子メール」が消えてしまいます名前フィールドに入力された私の名前。

「Subject」テキストフィールドをクリックすると、「Sub」というテキストが消えてしまいますが、私が入力した名前と電子メールデータは失われません。

メッセージテキストフィールドをクリックすると「メッセージ」というテキストが消えますが、残りのテキストフィールドに入力されたデータは失われたくありません。

以下のアクションスクリプトをご覧ください。 解決策を見つけるのを手伝ってください。

アクションスクリプト:

contact_name.text ="Name"; 
contact_email.text ="Email"; 
contact_subject.text = "Sub"; 
contact_message.text ="Message"; 
message_status.text = ""; 

send_button.addEventListener(MouseEvent.CLICK, submit); 
reset_button.addEventListener(MouseEvent.CLICK, reset); 

var timer:Timer; 
var var_load:URLLoader = new URLLoader; 
var URL_request:URLRequest = new URLRequest("send_email.php"); 
URL_request.method = URLRequestMethod.POST; 

function submit(e:MouseEvent):void 
{ 
if(contact_name.text == "Name" || contact_email.text == "Email" || 
    contact_subject.text == "Sub" || contact_message.text == "Message") 
{ 
    message_status.text = "Please fill up all text fields."; 
} 
else if(!validate_email(contact_email.text)) 
{ 
    message_status.text = "Please enter the valid email address."; 
} 
else 
{ 
    message_status.text = "sending..."; 

    var email_data:String = "name=" + contact_name.text 
        + "&email=" + contact_email.text 
        + "&subject=" + contact_subject.text 
        + "&message=" + contact_message.text; 

    var URL_vars:URLVariables = new URLVariables(email_data); 
    URL_vars.dataFormat = URLLoaderDataFormat.TEXT; 

    URL_request.data = URL_vars; 
    var_load.load(URL_request); 
    var_load.addEventListener(Event.COMPLETE, receive_response); 
} 
} 

function reset(e:MouseEvent):void 
{ 
contact_name.text ="Name"; 
    contact_email.text ="Email"; 
    contact_subject.text = "Sub"; 
    contact_message.text ="Message"; 
    message_status.text = ""; 
} 

function validate_email(s:String):Boolean 
{ 
var p:RegExp = /(\w|[_.\-])[email protected]((\w|-)+\.)+\w{2,4}+/; 
var r:Object = p.exec(s); 
if(r == null) 
{ 
    return false; 
} 
return true; 
} 

function receive_response(e:Event):void 
{ 
var loader:URLLoader = URLLoader(e.target); 
    var email_status = new URLVariables(loader.data).success; 

if(email_status == "yes") 
{ 
    message_status.text = "Success! Your message was sent."; 
    timer = new Timer(500); 
    timer.addEventListener(TimerEvent.TIMER, on_timer); 
    timer.start(); 
} 
else 
{ 
    message_status.text = "Failed! Your message cannot sent."; 
} 
} 

function on_timer(te:TimerEvent):void 
{ 
if(timer.currentCount >= 10) 
{ 
    contact_name.text = contact_email.text = contact_subject.text = 
    contact_message.text = message_status.text = ""; 
    timer.removeEventListener(TimerEvent.TIMER, on_timer); 
} 
} 

おかげ --vamsi

答えて

0

は、あなたのcontact_nameあなたは、ユーザーがクリックtextプロパティをリセットイベントリスナーを追加することができますButtonであると仮定すると、このフィールドにような何か:

contact_name.addEventListener(
      MouseEvent.CLICK, 
      function(e:Event):void { 
       contact_name.text = ''; 
      } 
); 
0

あなたのテキストフィールドによってタブ移動すると、それらを空にしないであろうから、私はあなたが空にそれを残してテキストフィールドからfocusOutとき、それはで補充する必要があり、また...、代わりにクリックの をfocusInイベントを使用しますそのラベルテキスト...

var defaultText="Name"; 
addEventListener(FocusEvent.FOCUS_IN, function() { 
    if(text==defaultText) { 
     text=""; 
    } 
} 
addEventListener(FocusEvent.FOCUS_OUT, function() { 
    if(text=="") { 
     text=defaultText; 
    } 
} 
関連する問題