【问题标题】:Store user preferences into an object and reuse them later将用户首选项存储到对象中并在以后重复使用
【发布时间】:2014-01-02 14:48:13
【问题描述】:

我想构建一个应用程序,让用户将他的偏好存储到对象中,然后再使用它们。

到目前为止,我已经成功地将用户输入存储到数组中的对象中。现在我无法弄清楚如何使用存储的输入和重用。用户命名他的颜色并选择 rgbo ,点击保存,他的颜色已经出现在按钮旁边的下拉列表中。他可以有多种选择。稍后当用户决定改回一些旧外观时,他需要从列表中选择颜色并点击 Place 按钮。这是JS Bin

我正在寻找一些关于如何解决这个问题的指南。 谢谢。

【问题讨论】:

  • 您的代码中没有 JSON 的迹象。你这样做是为了什么?
  • 我认为 colors.push({ name_prop:name, rgb_prop:rgb, opacity_prop:opacity });是 JSON 或以键值对存储数据。
  • 这只是 JavaScript。 JSON 是一种数据格式。
  • 所以我使用的是 JSON 数据格式对吗?如果这不是 JSON,您是否看到了一种使用存储数据并从下拉列表中恢复颜色的方法?
  • 不,您使用的是 JavaScript。我仍然不确定你到底想要什么。用户可以离开页面然后返回,还是留在页面上并从下拉列表中选择一个值?

标签: javascript arrays object


【解决方案1】:

到目前为止,您似乎已经拥有了所需的东西,但是 Place() 函数是空的。当用户对滑块进行更改并单击“保存”时,colors 数组将正确更新为包含正确信息的新对象。所以colors 你要求的对象;您只需要在Place() 函数中对其进行处理。这是一些更新的代码,我将按照我认为您正在尝试完成的操作:

function changeColors() {
    //get the numbers from the html
    var rd = parseInt(document.getElementById("red").value);
    var gr = parseInt(document.getElementById("green").value);
    var bl = parseInt(document.getElementById("blue").value);
    var op = parseFloat(document.getElementById("opacity").value);

    //convert the decimal into hexadecimal

    var rdhex = (rd < 16) ? "0" + rd.toString(16) : rd.toString(16);
    var grhex = (gr < 16) ? "0" + gr.toString(16) : gr.toString(16);
    var blhex = (bl < 16) ? "0" + bl.toString(16) : bl.toString(16);

    //concatenate all hex to generate a color
    var hexcode = "#" + rdhex + grhex + blhex;

    //set the background of the div
    setColor(hexcode, op);
}

function setColor(hexcode, opacity) {
    //view the change in the browser
    document.getElementById("div").style.backgroundColor = hexcode;
    document.getElementById("colordisplay").innerHTML = hexcode;
    //change opacity
    document.getElementById("div").style.opacity = opacity; 
}

var colors = [];

function Save() {
    var name = document.getElementById("name").value;
    var rgb = document.getElementById("colordisplay").innerHTML;
    var opacity = document.getElementById("div").style.opacity;
    colors.push({
        name_prop:name,
        rgb_prop:rgb,
        opacity_prop:opacity
    });

    //pass the object to the drop down list
    var select = document.getElementById("selectColor");
    var opt = name;
    var el = document.createElement("option");
    el.innerHTML = opt;
    el.value = opt;
    select.appendChild(el);
    console.log(colors);
}

function Place() {
    var select = document.getElementById("selectColor");
    colors.forEach(function(colorObject) {
        if (colorObject.name_prop == select.value) {
            setColor(colorObject.rgb_prop, colorObject.opacity_prop);
        }
    });               
}

请注意,所有这些都只会在用户访问此页面期间存在。一旦他们重新加载页面,数据就消失了。如果您想保存内容以供以后访问该页面,您正在寻找一个更复杂的解决方案。

【讨论】:

  • 是的,我明白这一点。我似乎没有得到的是如何从颜色数组中的对象中获取名称、rgb 和不透明度并更改 div 的颜色。
  • 我编辑了我的答案以展示一个循环遍历颜色数组的示例。
  • 其实,我看到了更多你现在在问什么。我将更新我的答案,向您展示如何实际更改 div 的颜色。
猜你喜欢
  • 1970-01-01
  • 2013-09-20
  • 2018-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 2012-05-25
  • 2012-08-27
相关资源
最近更新 更多