greenteapot1
游民
积分:100

谁能告诉我原因

<?xml version="1.0" encoding="utf-8"?>
<canvas>
  <view width="240" height="400" resource="bg.jpg" fontsize="12">
  
    <simplelayout axis="y" spacing="1"/>
    
    <view width="120" height="16" fgcolor="blue">
      <simplelayout axis="x" spacing="0"/>
      <text text="aa"></text>
      <inputtext id="TextGouzhi1" oninit="LzFocus.setFocus(this)" text="100000">
      <handler name="onkeydown"  args="key" reference="LzKeys">
      <![CDATA[
      //var keycode = key.intValue();
      switch(key){
        case 40:
        LzFocus.setFocus(TextGouzhi2)
        break;
      }
      ]]>
      </handler>
      </inputtext>
    </view>
    
    
    <view width="120" height="16" fgcolor="blue" name="v2">
      <simplelayout axis="x" spacing="0"/>
      <text text="bb"></text>
      <inputtext id="TextGouzhi2" text="8547">
      <handler name="onkeydown"  args="key" reference="LzKeys">
      <![CDATA[
      //var keycode = key.intValue();
      switch(key){
        case 38:
        LzFocus.setFocus(TextGouzhi1)
        break;
        case 40:
        LzFocus.setFocus(TextGouzhi24)
        break;
      }
      ]]>
      </handler>
      </inputtext>
    </view>
    
    
    <view width="120" height="16" fgcolor="blue" name="v3">
      <simplelayout axis="x" spacing="0"/>
      <text text="cc"></text>
      <inputtext id="TextGouzhi24" text="1050">
      <handler name="onkeydown"  args="key" reference="LzKeys">
      <![CDATA[
      //var keycode = key.intValue();
      switch(key){
        case 38:
        LzFocus.setFocus(TextGouzhi2)
        break;
        case 40:
        LzFocus.setFocus(TextGouzhi1)
        break;
      }
      ]]>
      </handler>
      </inputtext>
    </view>
    
  </view>
</canvas>

从输入框1按向下键能跳转到输入框2,但是从输入框2按向下键不能跳转到输入框3

heather
游民
积分:258

这个问题,我们工程师已经在看,我们目前在回答开发者问题方面还不是很及时,不过我们现在较之前改进,并且还在改进中,嘿嘿,请再多多包涵一下,多谢!

nancy
版主
积分:902

这个问题的原因是每次按键时,三个handler都处理了。
其中按向下键时,第一个和第二个都会处理(因为第三个没有处理key=40的情况),这样就会有冲突导致只有一个有效。

使用handler时要理解reference的含义,特别是onkeydown的LzKeys,如果设置了onkeydown的reference="Lzkeys",那么任何时候任何地方的按键都会引起handler内代码被执行。而如果不设置,则只有当焦点到该handler的对象上时才会处理。

你这个问题的解决方案之一是把每个inputtext中onkeydown的reference属性去掉。
另外一种方案是,只用一个onkeydown的handler(最好放canvas下,这样可读性比较好),并且设置reference="LzKeys",然后在代码中判断当前焦点在哪里,然后再确定上下键时焦点移动到哪里。