1

我正在制作一个 chrome 扩展,当在焦点文本区域中按下回车键时,我想在文本中进行一些字符串替换。这是代码片段:

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的所有文本区域,我只想在任何这些文本区域中按下回车键时访问它们的值。但是,当我在网页上尝试扩展时,我总是在警报框中得到未定义。我猜 keyup 事件被触发,但它无法获得特定文本区域的句柄。我哪里错了?

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

4

1 回答 1

0

下面的例子应该可以解决问题!(请参阅此处的工作 JSFiddle)。

您不应该使用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);
                   }
            }  
    }
}
于 2013-05-16T18:38:12.063 回答