【问题标题】:pushing obj to array将 obj 推送到数组
【发布时间】:2018-04-04 07:55:52
【问题描述】:

我创建了一系列对象,并将它们组合成一个项目,

我正在尝试创建一个包含这些对象的数组,但我的代码存在 2 个小问题。

  1. eventName 不会像我想的那样增加,当我隔离该部分时它会增加,并且

  2. 它可以识别正确的信息,但是当我将它推送到数组时,它总是在 [0]...只是想知道我做错了什么?

我希望它没问题,如果我只使用我创建的小提琴,而不是到处复制粘贴。

$(document).ready(function() {
  showBreadCrumb();
});

function showBreadCrumb() {
  $("a").click(function() {
    let idzName = ($(this).attr('id'));
    let classzName = ($(this).attr('class'));
    let clickRecord = $(this).data('clicked', true);
    let count = 0;
    let eventName = makeName();
    let eventObject = makeEventObject(eventName, idzName, classzName);
    let eList = makeEventList(eventObject);


    function makeName() {

      let vName = "event" + (++count);
      let countO = new nameCount(vName, count);
      //console.log(countO,vName);

      return vName;
    }
    eventName = makeName();


    function nameCount(vName, count) {
      this.eName = vName;
      this.counter = count;
    }

    function makeEventObject(eventName, idzName, classzName) {

      function eventDetails(eventName, idzName, classzName) {
        this.eventName = eventName;
        this.idzName = idzName;
        this.classzName = classzName;
      }
      let eventObject = new eventDetails(eventName, idzName, classzName);
      // console.log(eventObject);
      return eventObject;
    }
  })

  function makeEventList(eventObject) {
    let eventList = [];
    eventList.push(eventObject);
    console.log(eventList);
  }
}

Fiddle URL

【问题讨论】:

  • 您的问题到底是什么?你想达到什么目的?你试过什么?

标签: javascript jquery count arr


【解决方案1】:

我不知道为什么所有这些重叠的内部功能, 但是如果你想将所有点击事件存储在一个数组中,你必须在你的函数之外标记你的数组以防止重新初始化它,计数器也是如此。

请参阅下面的工作 sn-p : (Ps删除了无用的方法+在点击范围之外标记了其他方法(为什么每次点击都在内存中声明函数..)

$(document).ready(function() {
  eventList = [];
  count = 0;
  showBreadCrumb();
});

function showBreadCrumb() {
  $("a").click(function() {
    let idzName = ($(this).attr('id'));
    let classzName = ($(this).attr('class'));
    let clickRecord = $(this).data('clicked', true);
    let eventName = makeName();
    let eventObject = makeEventObject(eventName, idzName, classzName);
    let eList = makeEventList(eventObject);
  });
}


function makeEventObject(eventName, idzName, classzName) {

  function eventDetails(eventName, idzName, classzName) {
    this.eventName = eventName;
    this.idzName = idzName;
    this.classzName = classzName;
  }
  let eventObject = new eventDetails(eventName, idzName, classzName);
  // console.log(eventObject);
  return eventObject;
}

function makeName() {

  let vName = "event" + (++count);
  return vName;
}

function makeEventList(eventObject) {
  eventList.push(eventObject);
  $(".as-console").html("");
  console.log(eventList);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="breadcrumb">Start @ Home</div>

<div class="menubar">
  <ul id="navigation_links">
    <li><a href="#" id="A" class="L1">Page A</a></li>
    <li><a href="#" id="B" class="L1">Page B</a></li>
    <li><a href="#" id="C" class="L1">Page C</a></li>
    <li><a href="#" id="D" class="L1">Page D</a></li>
    <li><a href="#" id="E" class="L1">Page E</a></li>
    <li><a href="#" id="F" class="L1">Page F</a></li>
    <li><a href="#" id="G" class="L1">Page G</a></li>
    <li><a href="#" id="H" class="L1">Page H</a></li>
  </ul>
</div>

【讨论】:

    【解决方案2】:

    array 总是只使用 一个 元素的唯一错误是因为代码 - let eventList = [];makeEventList() 方法内的每次点击时都会被初始化。

    解决方法:将let eventList = [];移到顶部。

    Demo

    【讨论】:

      猜你喜欢
      • 2021-08-25
      • 2019-01-31
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      相关资源
      最近更新 更多