トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   どこでもFlash【携帯向けFlash関連】
     Enterとテキスト入力
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
nacbox
Åê¹ÆNo.43304
投稿日時: 2009-9-1 2:57
新米
居住地: 東京
投稿: 25
使用環境:
Win7 / Flash CS4 PRO
Enterとテキスト入力
現在、Lite1.1でムービーを作成しています。

状態が「テキスト入力」のテキストフィールドが画面上に配置されています。

また、画面外に

on(keyPress"<Enter">) {
getURL("http://www.hoge.jp");
}

というスクリプトを組んだボタンが配置されています。

それ以外に、画面内に複数のボタンがあります。


「決定キー」を押した際の、想定している挙動としては、
・テキスト入力欄にフォーカスが当たっている時はテキストの入力を行う
・それ以外にフォーカスが当たっている時には指定のURLへジャンプする
という動きになります。

しかし、現在、テキスト入力欄にフォーカスが当たっている時でも、決定キーを押すとon(keyPress"<Enter">)?が効いてしまい、ページが遷移してしまいます。

おそらく、
on(keyPress"<Enter">) {?}
の中に、「テキストフィールドにフォーカスが当たっているか否か」を判定して分岐するような仕組みを組み込むべきなのだと思うのですが、この「テキストフィールドにフォーカスが当たっているか否か」をどうやって判定していいのか分かりません。

この判定方法を教えてください。
コマツ
Åê¹ÆNo.43306
投稿日時: 2009-9-1 9:41
職人
居住地: 東京都葛飾区
投稿: 356
使用環境:
windows7
CS5.5 CS6
Re: Enterとテキスト入力
nacbox さん、こんにちは。

「それ以外にフォーカスが当たっている時」というのが、ボタンインスタンスであればできるように思えます。

入力テキスト以外のボタンインスタンス全てに以下の構文を書きます。

on(rollOver){
 focusFlag = 0;
}
on(rollOut){
 focusFlag = 1;
}


後は、Enterを設定する箇所を以下のようにします。

on(keyPress"<Enter">) {
 if(focusFlag == 0){
  getURL("http://www.hoge.jp");
 }
}



入力テキストフィールドそのものに、イベント等は設定できませんので、その周りにあるボタンのrollOverとrollOutをもって、判定させるようなことをすればできるかと思いますよ。
nacbox
Åê¹ÆNo.43309
投稿日時: 2009-9-1 11:25
新米
居住地: 東京
投稿: 25
使用環境:
Win7 / Flash CS4 PRO
Re: Enterとテキスト入力
やってみました。
結論から言うと、うまくいきません。

テキストフィールド以外のボタンにフォーカスが当たっていることを判定するのは、成功しています(テキストフィールドがフォーカスしている時に決定キーを押しても飛ばなくなった)。
しかし、キーを押しても何も起きず、テキスト入力画面に移動しません。

おそらく、動きとしては、
on(keyPress"<Enter">) { ---(A)
if(focusFlag == 0){ ---(B)
getURL("http://www.hoge.jp");
}
}
で、確かにフラグの関係で(B)は無視されるものの、(A)は有効なため、処理がテキストフィールド側に渡されないからではないかと……。


困ってしまいました。
諦めて、「テキストフィールド以外のボタン」それぞれにボタンアクションを仕込む方式にして、on(keyPress"<Enter">)専用の画面外ボタンは削除するしかないのかも知れません。
コマツ
Åê¹ÆNo.43315
投稿日時: 2009-9-2 9:13
職人
居住地: 東京都葛飾区
投稿: 356
使用環境:
windows7
CS5.5 CS6
Re: Enterとテキスト入力
Enterが先に優先されてしまい、テキストフィールドの入力画面に移行できないということですね。
スイマセン、それは想定外でした。確認しなくてスイマセン。。。


では、これではどうでしょう?
恐らく画面外にあるボタンに対して、Enterのキーイベントをつけているかと思います。
このボタンを「_visible」等で反応しないものにする手はどうでしょう?

lite1.1では、ボタンにインスタンス名が付けられないので、「_visible」は設定できませんが、MovieClipであればできます。
ボタンをMovieClipに変換して、例えば「set_mc」と名前を付けます。

それに伴い、MovieClip内のボタンに設定した、ActionScriptの変数のパスも変えます。


on(keyPress"<Enter>") {
 if(_root.focusFlag == 0){
  getURL("http://www.hoge.jp");
 }
}


後は各ボタンの方で、このMovieClipに対して、「_visible」の変更を行ないます。

on(rollOver){
 focusFlag = 0;
 set_mc._visible = true;
}
on(rollOut){
 focusFlag = 1;
 set_mc._visible = false;
}


ボタンにフォーカスしている時だけ「_visible」で表示して、Enterが反応するようにする方法です。
デバイスセントラル環境で確認した範囲ではうまくいきそうな感じを受けました。

試してみてください。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops