开发者问题收集

类型错误:无法设置未定义的属性“data_id”

2018-07-24
14271

我的 js 代码有些问题,我不知道如何修复它 这是我的代码:

  $('#btn_valid').click(function(){

    var data = new Array();
    var data_id;
    var data_picture;
    var data_title;
    var data_p_picture;
    var data_p_title;
    var data_s_picture;
    var data_s_title;
    var data_reaction;
    var data_datetime;
    var i = 0;


    $('.cbx_ac:checked').each(function(){

      data_id = $(this).attr('data-id');
      data_picture = $(this).attr('data-picture');
      data_title= $(this).attr('data-title');
      data_p_picture = $(this).attr('data-p_picture');
      data_p_title = $(this).attr('data-p_title');
      data_s_picture = $(this).attr('data-s_picture');
      data_s_title = $(this).attr('data-s_title');
      data_reaction = $(this).attr('data-reaction');
      data_datetime = $(this).attr('data-datetime');

      console.log(data_id); // I Get a value here ( 2564115647_15498456665 )

      data[i]['data_id'] = data_id;  //Error here :  Uncaught TypeError: Cannot set property 'data_id' of undefined
      i++;

    })
    console.log(data);
  })

我尝试设置 data[i] = [] 时出现此错误,但似乎不是解决方案:

Error here :  Uncaught TypeError: Cannot set property 'data_id' of undefined
3个回答

问题是因为 数据[i]不确定的 。因此,您正在尝试设置 未定义 的属性,因此错误。

要解决此问题,您需要首先在 数据[i] 中创建一个对象,例如:

148486600

但是 值得注意的是,您可以大规模 简化此逻辑并将其干燥。当您访问元素的 data() 方法时,它将返回对象中的所有属性。因此,只要属性名称与要创建的对象的属性名称匹配,只需使用 map()

699102356 < /code>

请注意,上面的示例缺少 数据 html中的属性,但这仅仅是为了简洁。您可以轻松地将它们全部添加到生产版本中。

Rory McCrossan
2018-07-24

由于 data[i] 未定义为数组,因此出现错误。

如果您定义

    data[i] = {}; 

则以下语句将起作用。

    data[i]['data_id'] = data_id;
vishu
2018-07-24

data[i] 未定义,因此

简单更改

data[i] = {};
data[i]['data_id'] = data_id;
$('#btn_valid').click(function(){

    var data = new Array();
    var data_id;
    var data_picture;
    var data_title;
    var data_p_picture;
    var data_p_title;
    var data_s_picture;
    var data_s_title;
    var data_reaction;
    var data_datetime;
    var i = 0;


    $('.cbx_ac:checked').each(function(){

      data_id = $(this).attr('data-id');
      data_picture = $(this).attr('data-picture');
      data_title= $(this).attr('data-title');
      data_p_picture = $(this).attr('data-p_picture');
      data_p_title = $(this).attr('data-p_title');
      data_s_picture = $(this).attr('data-s_picture');
      data_s_title = $(this).attr('data-s_title');
      data_reaction = $(this).attr('data-reaction');
      data_datetime = $(this).attr('data-datetime');

      console.log(data_id); // I Get a value here ( 2564115647_15498456665 )
       data[i] = {};
      data[i]['data_id'] = data_id;  //Error here :  Uncaught TypeError: Cannot set property 'data_id' of undefined
      i++;
   

    })
    console.log(data);
  })
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="button" class="btn" id="btn_valid" value="Click Me" />
<input type="checkbox" data-id="data-id" data-picture="pic1" data-title="title1" id="scales" class="cbx_ac" name="feature"
               value="scales" checked />
NullPointer
2018-07-24