如何在javascript中获取keypress事件上文本框的值

时间:2013-05-16 16:49:14

标签: javascript google-chrome-extension key-events

我正在制作一个chrome扩展名,当我在一个聚焦的textarea中按下回车键时,我想在文本中做一些字符串替换。以下是代码段:

var elems = document.getElementById("ChatTabsPagelet").getElementsByTagName("textarea"),i;
matchClass = "uiTextareaAutogrow";

for (i in elems) {
    if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')> -1) {
    text = elems[i].value;          
            elems[i].onkeyup = function(evt) {
              if(evt.keyCode == 13){
               alert(elems[i].value);
              }
      };
   }
}

基本上我正在寻找所有带有 uiTextareaAutogrow 类的textareas,我只想在任何这些textareas中按下回车键时访问它们的值。但是,当我在网页上尝试扩展时,我总是在警告框中看到 undefined 。我想keyup事件被触发但它无法获得特定textarea的句柄。我哪里错了?

注意:我热衷于仅使用javascript(而不是jquery),因为我希望扩展程序非常轻松。

1 个答案:

答案 0 :(得分:0)

以下示例应该可以解决问题! (see a working JSFiddle here)。

您不应将for..in与类似数组的对象一起使用,因为无法保证订单。此外,当在动态函数中引用元素的值时,您需要使用this.value

var elems = document.getElementsByTagName("textarea")
matchClass = "uiTextareaAutogrow";
for(var i = 0, n = elems.length; i < n; i++) { // <---- simple for loop
    if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')> -1) {
             elems[i].onkeyup = function(evt) {
                  if(evt.keyCode == 13){
                      alert(this.value);
                   }
            }  
    }
}