我正在制作一个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),因为我希望扩展程序非常轻松。
答案 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);
}
}
}
}