如何在jQuery中正确清除对象数组?

时间:2017-11-07 15:43:03

标签: jquery arrays

我知道这个问题在这里已经得到了很多答案,但是这些解决方案对我来说不起作用,也许我正在做一些愚蠢的事情,但我不太明白我的代码到底出了什么问题。将临时数据保存在对象数组中然后使用ajax和php将其发送到数据库也很好吗?

我正在做一个多步骤表单,我需要在两个步骤之间保存数据。

从代码中你可以看到我尝试了不同的解决方案来清除对象,但没有一个工作。此外,当我检查长度时,它总是为0,这意味着对象是空的。我在这里缺少什么?

每次检查控制台日志时,之前的数据仍然存在(检查图像)。

我的代码

$(document).on('click', '.e-check', function(){
  $('.e-check').text('check_box_outline_blank');
  $('.e-check').removeClass('e-checked');
  $(this).text('check_box');
  $(this).addClass('e-checked');
  var edata = '';
  edata = {};
  edata = undefined;
  console.log(edata.length);
  edata = {
    'ename' : $(this).data('ename'),
    'owner' : $(this).data('owner'),
    'estart' : $(this).data('estart'),
    'eid' : $(this).data('eid'),
    'eat' : $(this).data('eat'),
    'sec' : $(this).data('sec'),
    'pid' : $(this).data('pid')
  };
  $(document).on('click','.e-next-1', function(){
      console.log(edata);
  });
});

1 个答案:

答案 0 :(得分:2)

您有一个范围问题。您需要全局声明变量以变异变量。你可以这样做:

var edata = '';

$(document).on('click', '.e-check', function(){
  $('.e-check').text('check_box_outline_blank');
  $('.e-check').removeClass('e-checked');
  $(this).text('check_box');
  $(this).addClass('e-checked');
  edata = {};
  edata = undefined;
  console.log(edata.length);
  edata = {
    'ename' : $(this).data('ename'),
    'owner' : $(this).data('owner'),
    'estart' : $(this).data('estart'),
    'eid' : $(this).data('eid'),
    'eat' : $(this).data('eat'),
    'sec' : $(this).data('sec'),
    'pid' : $(this).data('pid')
  };
});

$(document).on('click','.e-next-1', function(){
    console.log(edata);
});

注意var edate =''; part在click回调之外,因此可以全局访问