alphabet
游民
积分:170

关于inputtext和键盘消息响应

使用inputtext时要按下OK键输入输入完毕后要按左软键或者右软键(光标在最左)退出输入模式,但是这样的话再输入过程中所有键盘事件会被Handler所捕获影响操作,所以是否有什么接口可以知道输入模式是否打开?

nancy
版主
积分:2542

没有专门的接口可以知道输入模式是否打开。但是在编程中可以使用一点点小技巧去控制。
例如:定义一个全局变量

<script>
  var inputMode = false;//在进入输入法的时候将此值设置为true。
</script>
<handler name="onkeydown" reference="LzKeys" args="key">
   if(inputMode) {
      inputMode = false;
      return;
   }
   //其他控制逻辑
</handler>

通过这种方式可以控制。

alphabet
游民
积分:170

这应该不行,当我在输入一个字时也会触发Handler的这样的话按第一个键时执行inputMode = false;按下第二个个键时就又恢复原样了

nancy
版主
积分:2542

reference="LzKeys" 一般在handler里面应该去掉这个属性的设置,这个属性表示不管handler在任何位置都能接受到按键事件,那样你的setFocus就没用了。

没有专门的接口可以知道输入模式是否打开,这个只能自己通过其他的方式去控制,而上次的回答只是给你的一点建议,具体的方式还是希望能通过你自己的思考去完成。

bill
游民
积分:70

设置一个全局变量是不行的吧,因为无法根据按键来判断是否输入已经结束了,所以进入输入模式后根本不知道什么时候结束,不知道还有没有别的什么方法?

nancy
版主
积分:2542

可以给inputtext增加一个“ontext”handler来监听输入是否完成,在完成输入后,“ontext”事件被触发。(注:首次加载时,由于给inputtext赋空值,会触发一次“ontext”事件)示例代码:

<canvas>

	<inputtext id="input" x="27" y="76" width="160" focusable="true"
fgcolor="0x000000" fontsize="15">				
		<handler name="onkeydown" args="k">
			alert("key : " + k);
		</handler>
		<handler name="ontext">
			alert("ontext");
		</handler>
	</inputtext>

	<handler name="oninit">
		LzFocus.setFocus(input);
	</handler>

</canvas>