作者KawasumiMai (魔物を讨つ者)
看板Flash
标题Re: [问题] 如何判断输入的文字讯息中的"ENTER"或갠…
时间Thu Jan 27 23:49:32 2011
不知道有没有回答你的问题
我看你的情况应该是AS3.0的TextField
依照我做过聊天室的经验来说
真的很怪
首先
我预设Enter送出
而Ctrl+Enter换行
Flash的读取用换行字元不是想像中的""或是chr(13)
而是"\r"
但是的写入用换行字元却是"\n"
if(key.keyCode==13 && key.ctrlKey==false){
按下Enter发送,这没问题
if(ctrl_text.text !== "" &&
ctrl_text.text.substring(ctrl_text.caretIndex-1,ctrl_text.caretIndex) == "\r")
{
这个很诡异
当目标text不是空时才会发送
但是按下Enter瞬间其实他是会先换行才执行你送出的function
换句话说,Flash程式本身换行优先,而你的function次要
因此送出的时候侦测text时,会是"文字讯息\r"
if(ctrl_text.text == "\r")
{
ctrl_text.text = ""
//如果送出时只有换行字元,表示原先是空的,强制把换行字元弄掉(不换行)
}else{
//发送讯息
}
}
}
if(key.keyCode==13 && key.ctrlKey==true){ // Ctrl+Enter
ctrl_text.text=ctrl_text.text.substring(0,ctrl_text.caretIndex) //游标所在之处
+"\n" //加上换行
+ctrl_text.text.substring(ctrl_text.caretIndex,ctrl_text.length) //接上结尾
ctrl_text.setSelection(ctrl_text.caretIndex+1,ctrl_text.caretIndex+1)
//将游标移到你换行的地方,因为\n算一个,因此要+1
//我记得这个情况+"\r"会没反应
这是使用Ctrl+Enter避开普通Enter会产生基本换行动作的funcion
http://www.mediafire.com/?p8ub48j2y3ig5cj
这是funcion区段
呼叫方法是test的键盘侦测
上面的方法听说称为dirty hack www
也就是只是查出Flash预设会怎样,强制反解而已
※ 引述《yhn0tgb60 (呦厚厚)》之铭言:
: 下面这段程式码 只有两个物件
: 一个是 inputTxt 是使用者用来输入文字
: 另一个 msgTxt 用来显示使用者输入的文字
: 当使用者在 inputTxt中输入完文字後按"ENTER"
: 就会将 inputTxt贴到 msgTxt 然後将 inputTxt清空
: 当 inputTxt 中没有输入文字时 按下"ENTER" 也不能送出讯息
: 我是用 KeyboardEvent.KEY_DOWN 来判断 是否按下 "ENTER"
: 在讯息确定不是"" 送到 msgTxt後 就将讯息清空
: 但出现一个问题
: 就是 "ENTER"会在 KeyboardEvent.KEY_DOWN 讯息结束後 才塞给inputTxt
: 所以等於 inputTxt.text='' 并没有完全把讯息清空
: 所以我又加了一个 addEventListener( KeyboardEvent.KEY_UP,KeyUpEnter );
: 在 "ENTER" 放开後 再清一次 inputTxt.text=''
: 这样就可以把讯息完全清空了
: 但是 当要输入中文时 就会失败 因为中文输入法选完字後要按"ENTER"
: 结果"ENTER" 按下後 中文讯息还来不及送给 msgTxt 就已经被 inputTxt.text=''
: 就变成不能打中文 = =
: 而当我一直按着 "ENTER" 不放时 "ENTER"的讯息最後还是会不对的被送出 完全档不掉
: 想请问大家的意见 谢谢了
: package
: {
: import flash.display.MovieClip;
: import flash.events.KeyboardEvent;
: import flash.ui.Keyboard;
: public class test extends MovieClip
: {
: public function test():void
: {
: inputTxt.text='';
: msgTxt.text='';
: addEventListener( KeyboardEvent.KEY_DOWN,KeyDownEnter );
: addEventListener( KeyboardEvent.KEY_UP,KeyUpEnter );
: }
: private function KeyDownEnter( evt:KeyboardEvent ):void
: {
: if( evt.keyCode == Keyboard.ENTER )
: {
: if( inputTxt.text!='' )
: {
: msgTxt.appendText('AAA:'+inputTxt.text+'\n');
: inputTxt.text='';
: }
: }
: }
: private function KeyUpEnter( evt:KeyboardEvent ):void
: {
: if( evt.keyCode == Keyboard.ENTER )
: {
: inputTxt.text='';
: }
: }
: }
: }
--
「杏、どうしたんだ?」
「どっ、どうもしてないわよ。あんたこそ、椋とデートじゃなかったの?」
「ずぶ濡れじゃねぇかよ、
ふっふっ」
「来ないで!!!!!!!!!!!!!!……
来ないで…お愿いだから…」
京都アニメ クラナド~AfterStory~第25话 「もうひとつの世界─杏编」
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.62.110.175
※ 编辑: KawasumiMai 来自: 61.62.110.175 (01/27 23:54)
1F:推 yhn0tgb60:非常谢谢你 我再研究看看 01/28 00:47
2F:推 yhn0tgb60:谢谢 关键在 ENTER='\r' 把'\r'判断掉 问题就解决了 01/30 15:30