javascript - 如何在 Jquery 上启用选项卡

标签 javascript jquery

我在那里遇到问题,我一直在尝试记录事件键代码,并且得到了键号(9),并且我认为我的脚本没有禁用event.keyCode 不会禁用按键功能。我应该对脚本进行哪些更改,以便选项卡可以再次处于事件状态?

这是我的代码:

$(function() {
  $('.number-format').on("keydown", function(event) {
    console.log(event.keyCode);
    if (event.shiftKey) {
      event.preventDefault();
    }
    if (event.keyCode == 46 || event.keyCode == 8) {} else {
      if (event.keyCode < 95) {
        if (event.keyCode < 48 || event.keyCode > 57) {
          event.preventDefault();
        }
      } else {
        if (event.keyCode < 96 || event.keyCode > 105) {
          event.preventDefault();
        }
      }
    }
  });

  $('.number-format').on("keyup", function(event) {
    var value = this.value.replace(/,/g, "");
    this.dataset.currentValue = parseInt(value);
    var caret = value.length - 1;
    while ((caret - 3) > -1) {
      caret -= 3;
      value = value.split('');
      value.splice(caret + 1, 0, ",");
      value = value.join('');
    }
    this.value = value;
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="number-format">

最佳答案

您可以将第二个条件更改为 if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9) 因为选项卡的 keyCode 为 9进入 else block 并执行 event.preventDefault();:

$(function() {
  $('.number-format').on("keydown", function(event) {
    console.log(event.keyCode);
    if (event.shiftKey) {
      event.preventDefault();
    }
    if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9) {} else {
//------------------------------------------------^^^^^^^^^^^^^^^^^^^^^
//add the tab keyCode in this if to skip it entirely so that it woks again
      if (event.keyCode < 95) {
        if (event.keyCode < 48 || event.keyCode > 57) {
          event.preventDefault();
//--------^^^^^^^^^^^^^^^^^^^^^^ this is preventing your tab action
        }
      } else {
        if (event.keyCode < 96 || event.keyCode > 105) {
          event.preventDefault();
        }
      }
    }
  });

  $('.number-format').on("keyup", function(event) {
    var value = this.value.replace(/,/g, "");
    this.dataset.currentValue = parseInt(value);
    var caret = value.length - 1;
    while ((caret - 3) > -1) {
      caret -= 3;
      value = value.split('');
      value.splice(caret + 1, 0, ",");
      value = value.join('');
    }
    this.value = value;
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" class="number-format">

关于javascript - 如何在 Jquery 上启用选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57087287/

相关文章:

javascript - 使用 wp 媒体 uploader 上传文件路径未显示在字段中

javascript - SVG foreignObject 在 Safari 上无法正常工作

jquery - 清除行中的值并模拟单击它

javascript - 在 Safari 上正确使用 Modernizr.prefixed 进行过渡和转换

JavaScript 模块模式以两种不同的方式编写,但结果相同

javascript - 在 Javascript 中替换 "with '

javascript - jquery 数据表和 css 未在 mvc 4 中呈现

javascript - useRef 钩子(Hook)中的 "current"键是什么?

jquery - 链接问题: Placing a link inside a clickable element中的链接

javascript - js中未定义的路径名