【问题标题】:right and left arrow keys does not work for me左右箭头键对我不起作用
【发布时间】:2016-01-23 03:42:46
【问题描述】:

喂,

我想为玩家添加跨浏览器兼容性的箭头键在照片中的四个数字之间导航的功能;

我写了代码,但是只能用上下方向键,左右方向键好像不行,不知道为什么;这是我的代码

<template name="range">
<div class="row">
<div class="col-xs-9 col-sm-9 col-md-9 col-lg-9">
<div class="valueSliders">

<!-- Verticle Number Selector -->
<div class="verticleNumberSelect">
  <span class="firstNumber">
    <span class="up"> </span>
    <span class="numberValue" tabindex="1">0</span>
    <span class="down"></span>
  </span>
  <span class="secondNumber">
    <span class="up"></span>
    <span class="numberValue" tabindex="1">0</span>
    <span class="down"></span>
  </span>
  <span class="thirdNumber">
    <span class="up"></span>
    <span class="numberValue" tabindex="1">0</span>
    <span class="down"></span>
  </span>
  <span class="fourthNumber">
    <span class="up"></span>
    <span class="numberValue" tabindex="1">0</span>
    <span class="down"></span>
  </span>
  <input type="hidden" id="verticleNumber" />

</div>
</div>
</div>


</div>
</template>

我的js是

Template.range.events({

     'keydown .numberValue':function(e){
    if (e.keyCode == '38') {
      counter = $(e.target).text();
    if (counter < 9){
      counter++;
    numberValue = $(e.target).text(counter);
    totalNumber(); 
  }
  } else if (e.keyCode == '40') {

     counter = $(e.target).text();
    if (counter > 0){
      counter--;
    numberValue = $(e.target).text(counter);
    totalNumber(); 
  }
} else if(e.keyCode == 39){
  var li = $('.numberValue');
  var liSelected; 
        if(liSelected){
            liSelected.removeClass('selected');
            next = liSelected.next();
            if(next.length > 0){
                liSelected = next.addClass('selected');

            }else{
                liSelected = li.eq(0).addClass('selected');
            }
        }else{
            liSelected = li.eq(0).addClass('selected');

        }
    }else if(e.keyCode == 37){
      var li = $('.numberValue');
      var liSelected;
        if(liSelected){
            liSelected.removeClass('selected');

            next = liSelected.prev();
            next.focus();
            if(next.length > 0){
                liSelected = next.addClass('selected');
            }else{
                liSelected = li.last().addClass('selected');
            }
        }else{
            liSelected = li.last().addClass('selected');
        }
    }
  }

  });

我在上面做错了吗??

知道这是一个 Meteorjs 应用程序

谢谢你的帮助

【问题讨论】:

  • 只是好奇,为什么你把keyCode在某些地方用引号括起来,而在其他地方却没有?它不应该影响任何事情,但你应该保持一致。 2)你有一个在线例子吗?社区将更有可能帮助他们看到的东西;调试可以与之交互的东西,然后通读代码会更快。
  • 感谢您对引号的注释,我会修复它;例如,请查看此链接link。谢谢

标签: javascript jquery meteor arrow-keys


【解决方案1】:

您的主要问题是var liSelected; 应该看起来像var liSelected = li.filter('.selected');,否则它永远不会被初始化。

liSelected.prev() 和 liSelected.next() 也不起作用,因为这将在 DOM 中搜索 liSelected 的上一个或下一个兄弟,而您的 '.numberValue' 项目位于不同的容器中。

工作版本如下所示。查看演示 - Fiddle:

    } else if (e.keyCode == 39) {
        // right        
        var li = $('.numberValue');
        var liSelected = li.filter('.selected');          
        if (liSelected.length>0) {
            liSelected.removeClass('selected');
            var posSelected = li.index( liSelected );
            next = posSelected+1;
            if (next < li.length) {
                liSelected = li.eq(next).addClass('selected');
            } else {
                liSelected =li.first().addClass('selected');
            }
        } else {
            liSelected = li.last().addClass('selected');
        }
    } else if (e.keyCode == 37) {
        // left
        var li = $('.numberValue');
        var liSelected = li.filter('.selected');          
        if (liSelected.length>0) {
            liSelected.removeClass('selected');
            var posSelected = li.index( liSelected );
            next = posSelected-1;
            if (next > -1) {
                liSelected = li.eq(next).addClass('selected');
            } else {
                liSelected =li.last().addClass('selected');
            }
        } else {
            liSelected = li.last().addClass('selected');
        }
    }

【讨论】:

  • 感谢大佬的帮助;我更改了我的代码并让您知道结果:)。感谢您的帮助
猜你喜欢
  • 2020-11-16
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多