在保持换档键的同时防止按键

bil*_*can 2 javascript jquery

我试图阻止某些键输入到输入框中,但只有在按住键的同时shift按下键才会:

$('selector').keydown(function(e) {
  console.log(e.shiftKey);
  if (e.shiftKey && e.which == 51) {
    e.preventDefault();
    alert('Disallowed');
  }
});
Run Code Online (Sandbox Code Playgroud)

警报触发,但角色仍显示在文本框中.

我试图寻找解释为什么会发生这种情况,但无济于事,任何帮助都将不胜感激!

编辑

删除alert似乎解决问题(这似乎很奇怪),我真的很想知道为什么它以这种方式行事,它似乎没有任何意义.

谢谢

the*_*dox 6

只需使用e.which而不是e.keyCode

$('#input').keydown(function(e) {
  if (e.shiftKey && e.which == 51) {
    e.preventDefault();
    alert('Disallowed');
  }
});
Run Code Online (Sandbox Code Playgroud)

工作样本

因为,来自jQuery doc:

对于键或鼠标事件,此属性指示特定的键或按钮,这是pressed.The event.which财产归event.keyCodeevent.charCode.建议观看event.which键盘输入键. event.which也归按钮按压(鼠标按下和mouseupevents),报告1左按钮,2为中间,并为右3.使用event.which而不是event.button.

试试吧 .keyup()

$('#input').keyup(function(e) {
   var val = $.trim( this.value );
  if (e.shiftKey && e.which == 51) {
    $(this).val(val.replace(/\#/,''));
  }
});
Run Code Online (Sandbox Code Playgroud)

DEMO

如果您尝试从输入中删除井号,请尝试:

$(this).val( val.replace(/\u00A3/g, '') );
Run Code Online (Sandbox Code Playgroud)

完整代码

$('#input').keyup(function(e) {
   var val = $.trim( this.value );
  if (e.shiftKey && e.which == 51) {
    $(this).val( val.replace(/\u00A3/g, '') );
  }
});
Run Code Online (Sandbox Code Playgroud)