无法设置属性' onclick'未定义 - 代码有效,但是出错了

时间:2017-11-23 13:15:54

标签: javascript jquery undefined

它在控制台中显示此错误,但代码正在运行:

  

未捕获的TypeError:无法设置属性' onclick'未定义的

如何解决此错误?

var buttons = document.getElementsByTagName("button");
var buttonsCount = buttons.length;
for (var i = 0; i <= buttonsCount; i += 1) {
  buttons[i].onclick = function(e) {
    if (this.id == "plus") {
      var pret_unitar_euro = $(this).closest("tr").find("input[name='pret_unitar_euro']").val($(this).closest("tr").find("input[name='input_value']").val() * $(this).closest("tr").find("input[name='pret_unitar_euro_h']").val());
      var pret_unitar_lei = $(this).closest("tr").find("input[name='pret_unitar_lei']").val($(this).closest("tr").find("input[name='input_value']").val() * $(this).closest("tr").find("input[name='pret_unitar_lei_h']").val());
      var pret_total_euro = $(this).closest("tr").find("input[name='pret_total_euro']").val($(this).closest("tr").find("input[name='input_value']").val() * $(this).closest("tr").find("input[name='pret_total_euro_h']").val());
      var pret_total_lei = $(this).closest("tr").find("input[name='pret_total_lei']").val($(this).closest("tr").find("input[name='input_value']").val() * $(this).closest("tr").find("input[name='pret_total_lei_h']").val());
    } else if (this.id == "minus") {
      var pret_unitar_euro = $(this).closest("tr").find("input[name='pret_unitar_euro']").val($(this).closest("tr").find("input[name='pret_unitar_euro_h']").val() * $(this).closest("tr").find("input[name='input_value']").val());
      var pret_unitar_lei = $(this).closest("tr").find("input[name='pret_unitar_lei']").val($(this).closest("tr").find("input[name='pret_unitar_lei_h']").val() * $(this).closest("tr").find("input[name='input_value']").val());
      var pret_total_euro = $(this).closest("tr").find("input[name='pret_total_euro']").val($(this).closest("tr").find("input[name='pret_total_euro_h']").val() * $(this).closest("tr").find("input[name='input_value']").val());
      var pret_total_lei = $(this).closest("tr").find("input[name='pret_total_lei']").val($(this).closest("tr").find("input[name='pret_total_lei_h']").val() * $(this).closest("tr").find("input[name='input_value']").val());

    }
  };
}
<button type="button" class="minus" id="minus">-</button>
<button type="button" class="plus" id="plus">+</button>

2 个答案:

答案 0 :(得分:4)

您的情况不正确。由于buttons[i]undefined,您在上次迭代时收到错误。

使用

for (var i = 0; i < buttonsCount; i += 1) {
}

而不是

for (var i = 0; i <= buttonsCount; i += 1) {
}

当您使用时,它可用于附加事件处理程序,然后不需要for循环。

$("button").on('click', function(e) {
  //Your code
});

答案 1 :(得分:3)

  

如何解决此错误?

您需要将for循环中的条件修复为

for (var i = 0; i < buttonsCount; i += 1) { //using < instead of <=

因为当i等于buttonCount时,buttons[i]变为undefined,因为您尝试从数组中访问一个数组而不具有的项。