Javascript 无法使用jquery从本地存储获取数据的当前id

Javascript 无法使用jquery从本地存储获取数据的当前id,javascript,jquery,json,html,Javascript,Jquery,Json,Html,我正在开发一款离线存储数据的应用程序。我的问题是,当我试图从本地存储中检索数据进行更新/编辑时,它一直只调用第一项的id,而不调用视图中数据的id 请问我做错了什么 以下是我加载员工的代码: // load cases from localStorage var employees; if (localStorage.getItem('employees')) { employees = JSON.parse(localStorage.getItem('employees')); } el

我正在开发一款离线存储数据的应用程序。我的问题是,当我试图从本地存储中检索数据进行更新/编辑时,它一直只调用第一项的id,而不调用视图中数据的id

请问我做错了什么

以下是我加载员工的代码:

// load cases from localStorage
var employees;

if (localStorage.getItem('employees')) {
  employees = JSON.parse(localStorage.getItem('employees'));
} else {
  // If no cases, create and save them
  employees = [];
  // offling storing of our cases
  localStorage.setItem('employees', JSON.stringify(employees));
}

// show case listing in list view page
var showEmployees = function () { 
  //erase existing content
  $('#employee_list').html('');

  //insert each employee
  for (var i = 0; i<employees.length; i++) {
    addEmployees(employees[i]);       
  }
};
以下是编辑按钮的代码:

//register Edit button 
$('.edit_button').live('click', function (e) {
  alert('I was Cliked!');
  e.stopPropagation();

  $.each(employees, function(a, b) {
    //if(b.id == employees[i]){ 
    $('#id').val(b.id);
    $('#employeeno').val(b.employeeno);
    $('#employeename').val(b.employeename);
    $("#stateoforigine").val(i.stateoforigine);
    $('#employeephone').val(b.employeephone);
    $('#dateofbirth').val(b.dateofbirth);
    $("#id").attr("readonly","readonly");
    $('#employeeno').focus();
    $.mobile.changePage('#edit_employee_page');

    return false;
    //}
  });
});
这是我的本地存储:

[
   {"id":1,
           "employeeno":"DEF/234/20014",
           "employeename":"Bill Gates",
           "stateoforigine":"Osun",
           "employeephone":"080765432",
           "dateofbirth":"12/11/1965"},

   {"id":2,
           "employeeno":"DEF/234/20014",
           "employeename":"Bill Gates",
           "stateoforigine":"Osun",
           "employeephone":"080765432",
           "dateofbirth":"12/11/1966"},

   {"id":3,
           "employeeno":"DEF/234/20014",
           "employeename":"Bill Gates",
           "stateoforigine":"Osun",
           "employeephone":"080765432",
           "dateofbirth":"12/11/1966"},

   {"id":4,
           "employeeno":"DAST/003/2003",
           "employeename":"Gold Base",
           "stateoforigine":"",
           "employeephone":"",
           "dateofbirth":"12/03/1986"}
]

感谢您帮助我将员工存储到
localStorage

中的方法是正确的,但您将员工从中解救出来的方法是错误的。您通过以下方式存储您的员工:

localStorage.setItem("employees", JSON.stringify(employees));
因此,为了检索它们,您必须使用:

var employees = JSON.parse(localStorage.getItem("employees"));
您知道,您将数据存储为一个字符串,其键为“employees”;因此,只能通过该键检索它。由于localStorage中存储的所有数据都保存为字符串,因此必须使用
JSON.parse()
将数据转换回对象(在本例中为数组)。然后你可以迭代你的员工

更新: 您应该在呈现页面后立即运行此代码(请参见下文)。我不知道你是怎么做到的-如果你使用的是IIFE或jQuery的
document.ready()
函数。如果最初没有加载空数组,我认为没有必要将空数组存储到localStorage中,因此,我去掉了else子句

var employees = [];

if (localStorage.getItem('employees') !== null) {
  employees = JSON.parse(localStorage.getItem('employees'));
}
在运行时逐行调试此变量,并使employees变量包含的数据为正值。如果它不包含数据,那么就没有什么可编辑的了

但是,如果有数据,则执行
showEmployees()
函数。奇怪的是,我并没有在你的代码中看到你真正调用它的地方。它是否绑定到UI中的按钮或操作?另外,在您的
$('edit_employee_page')
单击事件函数之后,
循环的
功能是什么?它试图不正确地从localStorage读取数据,但它什么也不做


我认为,如果你只是使用断点一行一行地检查代码,并在桌面上检查输入/输出,你就会发现哪里出了问题。

你将员工存储到
localStorage
中的方式是正确的,但你将他们释放出来的方式是不正确的。您通过以下方式存储您的员工:

localStorage.setItem("employees", JSON.stringify(employees));
因此,为了检索它们,您必须使用:

var employees = JSON.parse(localStorage.getItem("employees"));
您知道,您将数据存储为一个字符串,其键为“employees”;因此,只能通过该键检索它。由于localStorage中存储的所有数据都保存为字符串,因此必须使用
JSON.parse()
将数据转换回对象(在本例中为数组)。然后你可以迭代你的员工

更新: 您应该在呈现页面后立即运行此代码(请参见下文)。我不知道你是怎么做到的-如果你使用的是IIFE或jQuery的
document.ready()
函数。如果最初没有加载空数组,我认为没有必要将空数组存储到localStorage中,因此,我去掉了else子句

var employees = [];

if (localStorage.getItem('employees') !== null) {
  employees = JSON.parse(localStorage.getItem('employees'));
}
在运行时逐行调试此变量,并使employees变量包含的数据为正值。如果它不包含数据,那么就没有什么可编辑的了

但是,如果有数据,则执行
showEmployees()
函数。奇怪的是,我并没有在你的代码中看到你真正调用它的地方。它是否绑定到UI中的按钮或操作?另外,在您的
$('edit_employee_page')
单击事件函数之后,
循环的
功能是什么?它试图不正确地从localStorage读取数据,但它什么也不做


我认为,如果您只需使用断点一行一行地检查代码,并在桌面上检查输入/输出,您就会发现哪里出了问题。

代码中似乎存在断开连接的情况。也许你漏掉了几行;您定义了一个字符串
editEmployee
,但您存储了
JSON.stringify(employees)
,而
employees
未在代码中定义:

$('#edit_employee_page').on('click' , function(){ 

    var editEmployee = JSON.stringify({
        id: employees.length+1,
        //........
    });

    //Alter the slected data
    localStorage.setItem("employees", JSON.stringify(employees));     
    return true;
});

您的代码中似乎也存在断开连接的情况。也许你漏掉了几行;您定义了一个字符串
editEmployee
,但您存储了
JSON.stringify(employees)
,而
employees
未在代码中定义:

$('#edit_employee_page').on('click' , function(){ 

    var editEmployee = JSON.stringify({
        id: employees.length+1,
        //........
    });

    //Alter the slected data
    localStorage.setItem("employees", JSON.stringify(employees));     
    return true;
});

我也有类似的任务要做。我是这样做的。 我传递了要作为Id属性传递的动态Id

    id="'+empData.id+'"
然后在

 $('.edit_button').live('click', function (e) {
    alert('I was Cliked!');
    var empId=$(this).attr('id');

代码的其余部分是相同的

我也有类似的任务要做。我是这样做的。 我传递了要作为Id属性传递的动态Id

    id="'+empData.id+'"
然后在

 $('.edit_button').live('click', function (e) {
    alert('I was Cliked!');
    var empId=$(this).attr('id');

代码的其余部分是相同的

您是如何获得
员工的
?您是如何获得
员工的
?您好,感谢您的帮助,我将其更改为var employees=JSON.parse(localStorage.getItem(“employees”);但还是没有运气。我还可以做些什么您在这里定义变量
employees
?你需要在你的代码里告诉我们。布雷特,谢谢你帮我。我已经包括了我所有的代码。我想问题可能是我声明了一个函数(empData),这是我在addelementtolist视图中使用的。感谢您的时间。特别是,您在加载和显示员工或在加载后编辑他们时遇到问题吗?我在加载和显示他们到表单字段时遇到问题。(因此我可以编辑他们)嗨,感谢您的帮助,我将其改为var employees=JSON.parse(localStorage.getItem(“employees”);但还是没有运气。我还可以做些什么您在这里定义变量
employees
?你需要在你的代码里告诉我们。布雷特,谢谢你帮我。我已经包括了我所有的代码。我想问题可能是我声明了一个函数(empData),这是我在addelementtolist视图中使用的。感谢您的时间。具体来说,您在加载和显示员工或在加载后编辑他们时遇到问题吗?我在将他们加载和显示到中时遇到问题