【问题标题】:Event.keyCode doesn't work with 'on input' - undefinedEvent.keyCode 不适用于“输入” - 未定义
【发布时间】:2014-02-05 06:00:51
【问题描述】:

目前我正在开发一个项目的功能,并且 event.keyCode 出现不适用于“输入”触发器。我正在使用 Google Chrome 31 和 jQuery 1.10.2。

这是我在方法中尝试的内容:

input.on('input', function(event){
    console.log("event.charCode: " + event.charCode);
    console.log("event.keyCode: " + event.keyCode);
    console.log("event.which: " + event.which);
    console.log("window.event ? event.keyCode : event.which: " + window.event ? event.keyCode : event.which);
});

所有这些方法我都得到undefined。我做错了什么还是这是一个 jQuery / Javascript 问题? Here you can find the fiddle.

我希望当用户在其中粘贴内容或以任何方式更改输入内容时触发我的输入。

ps:我的方法按预期工作,唯一不起作用的是......这个。

【问题讨论】:

标签: javascript jquery events input


【解决方案1】:

使用可以使用keydown事件

input.on('keydown ', function(event){
    console.log("Code: " + event.which);
});

【讨论】:

  • 您可以从 javascript/jquery 事件中触发您的自定义事件,例如 change/keydown/paste 并将事件参数传递给您的自定义事件
【解决方案2】:

我认为这是因为您的事件不正确,您正在匹配输入的“输入”事件。
这可能就是你所追求的(注意paste 事件):

jQuery(function () {
  jQuery("#post-input").on('keyup', function(event){
    if(!(event.ctrlKey || $(this).data('skipkeyup'))) {
        console.log('keyup', event);
    } else {
        $(this).data('skipkeyup', true)
    }
  }).on('paste', function (event) {
      console.log('paste event', event);
  }).on('keydown', function(){
      $(this).data('skipkeyup', false)
  })

});

http://jsfiddle.net/uBZF9/9/

【讨论】:

  • 感谢您的回复,但“keyup”触发器不会触发我想要的每个事件。我希望当用户在其中粘贴某些内容或以任何方式更改输入内容时触发我的输入。
  • 将其更改为change,这样就可以了。您可能希望在代码中验证事件的类型,具体取决于您要实现的目标。如果您想每次都做不同的事情,您可以根据要求为每个事件设置不同的事件处理程序
  • “我希望用户在其中粘贴内容时触发我的输入” – 用户粘贴到输入字段中的内容可能不止一个字符,因此需要输入键码恕我直言,这种情况毫无意义。
  • 这就是为什么我把它改成change 并说你会想要检查事件。 但是如果您使用键盘粘贴,粘贴实际上仍会创建键码事件!
  • @danrichardson 我在这里尝试。等你的时候,可以看看我的 Fiddle 吗?
【解决方案3】:

查看Fiddle

我不确定这是你想要的,但你去吧

input.on('keyup keydown copy', function(event){
    console.log("Code: " + event.keyCode);
    console.log("Code: " + event.which);
    console.log("Code: " + window.event ? event.keyCode : event.which);
});

【讨论】:

  • 谢谢,这几乎帮助了我。 :P
  • 呵呵,差不多:) 至少,你现在有了一些想法,这就是重点。很高兴我能帮上忙
  • 如果你使用 keydown,我会小心在函数中做太多。否则,当您在输入内按下 shift 或 ctrl 时,您将不断触发事件。最好只使用keyup。
  • 使用 jQuery,您不需要同时检查 event.keyCodeevent.which。一个或另一个就足够了。
【解决方案4】:

尝试使用addEventListener,您可以将事件名称指定为字符串,并将动作事件作为参数包含:

  let keyCode;
  input.addEventListener('keydown', (e) => {
    keyCode = e.keyCode
  });
  input.addEventListener('input', (e) => {
    console.log(keyCode)
  })

【讨论】:

    【解决方案5】:

    那是因为你使用的是 onkeypress 而不是 onkeydown!

    尝试使用 onkeydown 进行操作,您将能够访问 e.keyCode。

    所以而不是:

    <input onkeypress="getKeyValue()"/>
    

    你应该这样做:

    <input onkeydown="getKeyValue()"/>
    

    希望对你有帮助,祝你好运!

    【讨论】:

      【解决方案6】:

      您可以使用更好的方法来实现相同的事情,而无需担心键的事件,即通过添加隐藏输入,然后跟踪其更改事件以使键被按下并使用它,这样您就不会不必担心密钥代码或其他任何事情。

      【讨论】:

        【解决方案7】:

        事件输入没有keycode,但是你可以这样使用inputType属性。

        console.log(event.inputType);
        
        event.inputType == "deleteContentBackward" // Backspace
        event.inputType == "deleteContentForward"  // Delete
        event.inputType == "insertText"            // When insert character
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-12
          • 2019-03-25
          • 1970-01-01
          • 2013-03-18
          • 2017-03-21
          • 1970-01-01
          • 1970-01-01
          • 2015-12-02
          相关资源
          最近更新 更多