如何将多个操作绑定到键盘事件

Ann*_*080 5 javascript facebook keyevent google-chrome-extension

我正在尝试制作一个chrome扩展,修改Facebook聊天窗口的活动文本区域中的文本.但是我希望只有当用户按下回车键才能进行更改,这样当文本仍然在textarea中时文本不会改变.我希望它使用javascript发生,并让它感觉它发生在后台,虽然我希望它keydownenter键的事件上被触发.

现在Facebook聊天窗口的textarea的相关JavaScript是:

<textarea class="blah" 
onkeydown="window.Bootloader && Bootloader.loadComponents(["control-textarea"], 
function() { TextAreaControl.getInstance(this) }.bind(this)); ">
</textarea>
Run Code Online (Sandbox Code Playgroud)

在我的扩展程序的JavaScript文件中.我keydown用这样的东西绑定事件:

//elem is bound to the focussed textarea object
elem.onkeydown = function(evt) {
              if(evt.keyCode == 13){
                 //Some javascript code I want to execute here...
               }
        };  
Run Code Online (Sandbox Code Playgroud)

我认为一旦用户按下该enter键,就会清除textarea并发出某种发布请求.所以我失去了我想用JavaScript修改的文本的范围.我通过按shift+ 检查了输入键绑定是否适用于我的扩展enter,并且它修改了文本没有问题.所以我的脚本运行正常.

但是我希望在清除textarea并发出post请求之前执行我的脚本.我只是不希望用户看到文本被修改.

我可以添加/修改Facebook使用的textarea的键绑定,如上面的google chrome扩展脚本中所示?非常感谢任何帮助.

com*_*nik 2

这里有一百万个重复的问题,但无论如何这里又出现了:

您可以使用 target.addEventListener(type,listener[,useCapture]); 在你的情况下,这将是

document.addEventListner(keypress, function(event) { //You can use keydown too
  if (event.which === 13) { // Value for Enter key if keydown or keyup used, use event.keyCode
    //some code that you want to add
  }
}  
Run Code Online (Sandbox Code Playgroud)

如果您使用 jQuery,则可以使用

$(document).keypress(function(event){
 if (event.which === 13) { 
   // Your code here
 }
});
Run Code Online (Sandbox Code Playgroud)

PS - 如果添加跨浏览器支持,您应该使用如下内容:-

if (target.addEventListener) {
  target.addEventListener('keypress',myFunction,false);
} 
else if(target.attachEvent) {
  target.attachEvent('onkeypress', myFunction, false);
} else {
  target.onkeypress = myFunction;
}
// Here myFunction is the callback where you would check for the character code and your custom code
Run Code Online (Sandbox Code Playgroud)