【问题标题】:Javascript alert after for loop is not workingfor循环后的Javascript警报不起作用
【发布时间】:2017-07-21 17:07:22
【问题描述】:

我有这个代码:

var txt = document.getElementsByClassName('rich-table-row');

document.getElementById("suma").onclick = function suma(){

   var calcule = 0;  

   for(var i = 1; i < txt.length; i++) {

    calcule +=  Number(((txt[i].getElementsByClassName('rich-table-cell')[2].getElementsByTagName('span')[0].innerText).substring(2)).replace(',',''));

   }

alert('test');

};

for 循环结束后,警报没有显示。我做错了什么? 谢谢

【问题讨论】:

  • 您确定您的 for 循环正在执行,或者甚至控制正在进入suma 函数?在输入函数 suma 时,您只需 console.log(); 即可知道这一点。还要检查你的控制台。
  • 控制台中可能有一个javascript错误在等着你。
  • 什么都没有。检查您的浏览器控制台是否有拼写错误...顺便说一下,数组是从零开始的
  • 如果你在循环之前alert(txt)会发生什么?
  • @OmSao 我确定它正在执行,因为如果我将“警报”放入循环中,我将在循环结束之前发出所有警报

标签: javascript loops for-loop onclick


【解决方案1】:

正如@James 所说,如果您要删除多个逗号,则需要使用定义为 global 的正则表达式。但是,就像他说的那样,这不应该阻止函数继续运行(只会导致 calcule 成为 NaN)。

如果没有标记,很难说出问题所在,但我怀疑您的代码中有一个 ReferenceError 可能与您尝试解析的标记相关(可能不返回单元格或跨度)。

我已经稍微重构了您的函数,包括将您的调用更改为replace() 以使用RegExp 并添加了假定的标记;它按预期工作:

JS:

var rows = document.getElementsByClassName('rich-table-row');

document.getElementById('suma').onclick = function () {
    var calcule = 0; 
    var cell, span, text;

    for(var i = 1; i < rows.length; i++) {
        cell = rows[i].getElementsByClassName('rich-table-cell')[2];
        span = cell.getElementsByTagName('span')[0];
        text = span.innerText.substring(2).replace(/[,]/g,'');
        calcule += Number(text);
    }

   alert(calcule);
};

HTML

<div class="rich-table">
  <div class="rich-table-row">
    <div class="rich-table-cell"></div>
    <div class="rich-table-cell"></div>
    <div class="rich-table-cell">
      <span>AB697,871,184</span>
    </div>
  </div>
  <div class="rich-table-row">
    <div class="rich-table-cell"></div>
    <div class="rich-table-cell"></div>
    <div class="rich-table-cell">
      <span>AB697,871,185</span>
    </div>
  </div>
</div>

<button id="suma">SUMA</button>

【讨论】:

  • 我在控制台得到这个:TypeError: txt[i].getElementsByClassName(...)[2] is undefined
  • 这意味着您的标记结构不支持您正在制作的 JavaScript 引用。 (即在至少一个被引用的rich-table-rows 上没有rich-table-cell 的第三个实例)。您可以编辑您的帖子以包含标记吗?
【解决方案2】:

我认为我设法解决问题...

由于来自控制台的错误,我插入了一个像这样的 IF if (typeof (txt[i].getElementsByClassName('rich-table-cell')[2]) != 'undefined')

我认为这个错误是因为在循环结束的某个地方,我得到了未定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多