0

Flash (AS3) では、1 つの「送信ボタン」、1 つの「リセット ボタン」、4 つの入力テキスト フィールド「名前、電子メール、件名、メッセージ」をインスタンス名「contact_name、contact_email、contact_subject、 contact_message"

setFocus と killFocus について非常に混乱しています。

AS3で、私は与えました

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

このファイルを公開すると、デフォルトで入力テキストフィールドに「名前、電子メール、サブ、メッセージ」というテキストが表示されます

私の要件は、名前フィールドをクリックすると、テキスト「名前」が消えて自分の名前を入力できるようになり、その後、電子メールフィールドをクリックすると、テキスト「電子メール」が消えると同時に消えるはずです。名前欄に入力した名前をなくしたい。

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

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

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

アクション スクリプト:

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|[_.\-])+@((\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

4

2 に答える 2

0

テキストフィールドをタブで移動しても空にならないため、クリックの代わりにfocusInイベントを使用します...また、テキストフィールドからfocusOutを空のままにすると、ラベルテキストが再入力されます...

var defaultText="Name";
addEventListener(FocusEvent.FOCUS_IN, function() {
   if(text==defaultText) {
      text="";
   }
}
addEventListener(FocusEvent.FOCUS_OUT, function() {
   if(text=="") {
      text=defaultText;
   }
}
于 2009-08-08T17:33:59.717 に答える
0

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

contact_name.addEventListener(
             MouseEvent.CLICK, 
             function(e:Event):void { 
                 contact_name.text = ''; 
             }
);
于 2009-03-18T12:36:55.923 に答える