【问题标题】:Arrow key pressed while shift key is held down按住 shift 键时按下箭头键
【发布时间】:2014-07-01 04:49:59
【问题描述】:

我有一个Sudoku 拼图,我想制作它,以便用户可以按住 shift 键并按住它,同时使用箭头键在单元格之间上下移动。已经设置的单元格是<input> 标记,与其他单元格一样,但它们具有readonly 属性。每个单元格都有一个“puzzle_cells”类和一个以“c”开头的 id,后跟它们所在的行号、“-”,然后是单元格号。

因此,从左数第五个向下的第三个单元格的 id 为“c3-5”。每个单元格都有一个 id,所以我认为可编辑的输入将具有类似 onkeyup="shiftArrows(this)" 的属性。我的问题是我在shiftArrows() 中输入了什么?

它可能会以这样的开头:

var input_id = $(this).attr('id');

但是我必须测试在按下 shift 键时是否按下了箭头键。如果按下shift+downshift+up 并且其正上方或下方的单元格为'readonly',则它将转到右侧并再次检查。如果那是'readonly',它会去左边两个,然后继续检查。如果按下shift+right,它将继续向右移动,直到找到一个空的,或者如果必须跳到下一行。 shift+left 也一样。

无论如何,我可能会这样做,但我不知道如何测试在按住 shift 键时是否按下箭头。

【问题讨论】:

    标签: javascript jquery input switch-statement readonly


    【解决方案1】:

    这能处理你所追求的吗?

    if (event.shiftKey && event.which == 38) { 
      //shift was down when up arrow pressed
    }
    

    JS 小提琴:http://jsfiddle.net/stroz/hrQEX/3/

    【讨论】:

    • 我可以在onkeyup属性中加入多个函数吗?
    • 看看我的 Fiddle,它处理不同的按键
    • 这对我不起作用。此外,出于跨浏览器的原因,用户可能希望使用 event.which 而不是 event.keyCode
    • 抱歉,错误的 Fiddle 链接现在应该可以工作了,请务必在结果窗格中单击以尝试一下。另外,我根据您的建议更改为 event.which 。干杯!
    • 对不起,妈妈让我去打麻袋