目前,我有一个 Chrome 扩展程序的工作代码块,但是我有各种重复的代码块,我希望最大限度地减少所需的代码。

document.getElementById('streamSelect').addEventListener('change', function() { 
    var t = document.getElementById("streamSelect").value; 
    chrome.storage.sync.set({ "streamSelect" : t }, function() {}); 
}, false) 
 
document.getElementById('volumeSlider').addEventListener('change', function() { 
    var u = document.getElementById("volumeSlider").value; 
    chrome.storage.sync.set({ "volumeSlider" : u }, function() {}); 
}, false) 
 
document.getElementById('currentSegment').addEventListener('change', function() { 
    var v = document.getElementById("currentSegment").value; 
    chrome.storage.sync.set({ "currentSegment" : v }, function() {}); 
}, false) 
 
document.getElementById('nowPlaying').addEventListener('change', function() { 
    var w = document.getElementById("nowPlaying").value; 
    chrome.storage.sync.set({ "nowPlaying" : w }, function() {}); 
}, false) 
 
document.getElementById('lastPlayed').addEventListener('change', function() { 
    var x = document.getElementById("lastPlayed").value; 
    chrome.storage.sync.set({ "lastPlayed" : x }, function() {}); 
}, false) 
 
document.getElementById('quickLinks').addEventListener('change', function() { 
    var y = document.getElementById("quickLinks").value; 
    chrome.storage.sync.set({ "quickLinks" : y }, function() {}); 
}, false) 
 
document.getElementById('desktopNotifications').addEventListener('change', function() { 
    var z = document.getElementById("desktopNotifications").value; 
    chrome.storage.sync.set({ "desktopNotifications" : z }, function() {}); 
}, false) 

因此,我尝试创建一个较小的代码块来监听对任何 HTML Select 元素的更改。它成功激活对 Select 元素所做的任何更改,并且还正确设置 Y 和 Z 变量,但它似乎没有完成 Chrome.Storage.Sync.Set 行的执行。

var setOptions = ["streamSelect", "volumeSlider", "currentSegment", "nowPlaying", "lastPlayed", "quickLinks", "desktopNotifications"] 
 
$("select").change(function() { 
    for(var i = 0; i < setOptions.length; i++) { 
        var Y = setOptions[i]; 
        var Z = document.getElementById(Y).value; 
        chrome.storage.sync.set({ Y : Z }, function() {}); 
    } 
}) 

我不确定我是否遗漏了一些简单的东西,但此时任何帮助使其正常工作的帮助将不胜感激。

请您参考如下方法:

使用 ES6,{[key]: value} 将创建 key key:

var key = "test"; 
var obj = {[key]: "value"}; // obj = {test: "value"} 

所以像这样的东西可能会起作用:

$("select").change(function() { 
    var id = this.id; 
    var val = this.value; 
    chrome.storage.sync.set({[id]: val}, function() {}); 
}) 

或者,非 ES6 版本:

$("select").change(function() { 
    var obj = {}; 
    obj[this.id] = this.value; 
    chrome.storage.sync.set(obj, function() {}); 
}) 


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!