javascript - 使用变化的变量调用本地存储

标签 javascript jquery html css jquery-ui

您好,我目前正在编写一个脚本,我想在其中保存通过输入文本附加的表数据,并且根据用户的选择进行自定义。

我想做的是将该表数据保存为用户使用输入选择的变量,用户可以在其中命名他创建的特定表数据。

这是我的表格和其他重要按钮的 html:

<label for="loadTask">Load Task:</label>
<label for="taskName">Task Name:</label>
<select id="loadTask" ></select>
<input type="text" id="taskName"></input>
<button type="submit" id="addTask">Add</button>

我会添加我的表格 html,但我觉得它与这个问题无关。

我想做的是..当用户想要保存他的表数据时,他使用 taskName 输入并命名他希望将表数据保存为的名称,然后他按下 addTask 按钮来保存数据对其进行字符串化。

然后我希望保存的数据出现在另一个 html 页面中,进入 html 选择,用户可以在其中选择他想要使用的表数据。以及将其添加到加载任务中,选择用户可以加载任务的位置并根据需要进行编辑。

这是我已经用我的 JS 尝试过的。

$(function() {
    $("#addTask").click(function() {
        let cells = Array.prototype.map.call(document.getElementById("items-table").rows, row => {
            return Array.prototype.map.call(row.cells, cell => cell.innerHTML);
    });

        taskName = $("#taskName").val();
        localStorage.setItem(taskName, JSON.stringify(cells));
        alert("Task has been Added");
    });
});

然后在我尝试的另一个 html 页面中:

$(function() {
    var cells = JSON.parse(localStorage.getItem(taskName) || "[]");

    $("#select-task").append('<option>'+cells+'></option>')
})

但这显然行不通,因为它无法识别任务名称。

我将如何更改此脚本或我应该添加什么,以便我能够将表数据保存为写入 taskName 输入的名称,并将该名称显示在 html 选择中,以便用户可以选择哪些表数据他想使用并且会记住每个任务是什么,因为它们保存在他命名的名称下。

另外,我将如何附加单元格以便删除所有表格数据,从而从所有选择中删除任务。我试过这个但它不起作用:

var tasky = loadTaskFromStorage1($("#loadTask").val());
$("#items-table").append(tasky.cells);

if ((tasky.cells[1][1]) = "") {
    delete savedTask[taskName]
}

我什至尝试更改变量 loadTaskFromStorage,因为我在另一个 JS html 文件中调用了它,但它仍然不起作用

我不能在调用它的同一个文件中调用 localStorage 吗?

感谢任何帮助。

最佳答案

如果你想显示一个 taskName 的列表,你应该从 localStorage 中获取它们。但是有些对象您不会将其视为任务。我的建议是将任务保存在 localStorage 上的新对象(或数组)中,并从该对象中查询它。

$(function () {

    // Load all tasks from storage and fill the tasks dropdown
    loadAllTasks();

    $("#addTask").click(function () {
        let cells = Array.prototype.map.call(document.getElementById("items-table").rows, row => {
            return Array.prototype.map.call(row.cells, cell => cell.innerHTML);
        });

        // create task object from cells
        var task = { cells: cells };

        // set name property of the task
        task.Name = $("#taskName").val();

        // call save method using the new task object
        saveTaskInStorage(task);
    });
});


function saveTaskInStorage(task) {
    // Get stored object from localStorage
    var savedTasks = JSON.parse(localStorage.getItem('tasks'));

    // To be sure that object exists on localStorage
    if (!savedTasks || typeof (savedTasks) !== "object")
        savedTasks = {};

    // Set the new or exists task by the task name on savedTasks object
    savedTasks[task.Name] = task;

    // Stringify the savedTasks and store in localStorage
    localStorage.setItem('tasks', JSON.stringify(savedTasks));

    alert("Task has been Added");
}

function loadAllTasks() {

    // Get all saved tasks from storage and parse json string to javascript object
    var savedTasks = JSON.parse(localStorage.getItem('tasks'));

    // To be sure that object exists on localStorage
    if (!savedTasks || typeof (savedTasks) !== "object")
        return;

    // Get all property name of savedTasks object (here it means task names)
    for (var taskName in savedTasks){
        $("#select-task").append('<option>' + taskName + '></option>')
    }
}

function loadTaskFromStorage(taskName) {
    var savedTasks = JSON.parse(localStorage.getItem('tasks'));

    // Return the task by its name (property name on savedTasks object)
    return savedTasks[taskName];
}

您还可以使用 loadTaskFromStorage(taskName) 按名称加载任务。例如:

var task = loadTaskFromStorage($("#select-task").val());

关于javascript - 使用变化的变量调用本地存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51907392/

相关文章:

javascript - 如何更改 SVG 路径颜色?

javascript - 如何替换文本以创建 div 类

javascript - 如何使右侧指令框上的箭头指向左侧焦点所在的字段?

javascript - 如何从维基百科表中获取第一列值的列表?

javascript - 如何在提交表单之前检测输入字段上的 ENTER 键按下情况?

html - 在一行上显示两个元素

php获取ajax请求中发布的id

javascript - 如何在javascript中链接两个.then?

javascript - 如何应用:empty selector to an XML document

javascript - 用于验证的 jQueryUI 工具提示