2017-06-29 89 views
-1

我正在編寫一個Chrome擴展程序,允許您輸入文本,點擊按鈕並將其格式化爲Twitter。點擊提交按鈕後,我將textarea的value設置爲推文。具體而言,我使用:textarea的值在更改時不顯示

arr.forEach((item) => { 
     INPUT.value = INPUT.value + item; 
    }); 

arr是鳴叫的一個字符串數組和INPUTconst INPUT = document.getElementById('input');結果而這個元素textarea的。

這工作正常,並按預期寫回推文。但是,我試圖在每個keyup事件中保存textarea的內容,以便人員可以關閉彈出窗口,重新打開它,並仍然可以使用它們的工作。

這是該代碼:把console.log(INPUT.value);語句之前和之後INPUT.value = obj.inputVal;

chrome.storage.local.get("inputVal", (obj) => { 
    if(obj.inputVal) { 
     INPUT.value = obj.inputVal; 
    } 
}); 

INPUT.addEventListener('keyup',() => { 
    chrome.storage.local.set({"inputVal": INPUT.value}); 
}); 

顯示INPUT.value確實被設置爲inputVal字段的對象的內容從Chrome中儲存返回。但是,該文本不會出現在彈出窗口的文本區域中。由於我正在使用與我稍後寫出推文完全相同的調用,所以我完全不知道爲什麼它在這裏不起作用。

一如既往,非常感謝任何見解!

+0

可能的重複[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用](https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – Makyen

回答

0

我想出了這一個。我自己的代碼是空白的。對Chrome存儲API的調用是異步的,我發現這很困難。

我有額外的代碼,其責任是以類似的方式寫出推文 - 如果一個人關閉彈出窗口,推文將被放回到textarea,以便他們不會丟失。這是該代碼:

chrome.storage.local.get("arr", (obj) => { 
    let local = []; 
    if(obj.arr) { 
     local = obj.arr; 
    } 
    INPUT.value = ''; 
    local.forEach((element) => { 
     INPUT.value = INPUT.value + element; 
    }); 
}); 

正如你所看到的,它的作用是空白的文本區域,準備回寫鳴叫部分。我只需要重新安排如何完成這項工作,以便選擇正確的行動方案。