【问题标题】:How to pass a value from one function to another如何将值从一个函数传递到另一个函数
【发布时间】:2020-09-26 21:04:55
【问题描述】:

  var boxes = document.getElementsByName('toggle');

  function markPreceding() {
    var curIndex = null;
    for (var j = 0; j < boxes.length; j++) {
      if (boxes[j].checked) {
        curIndex = j;
      }
    }
  }

  function checkInputs() {
    for (var k = 0; k <= curIndex.length; k++) {
      boxes[k].checked = true;
    }
  }

  for (var i = 0; i <= boxes.length; i++) {
    boxes[i].onchange = markPreceding;
    boxes[i].onchange = checkInputs;
  }
<input type="checkbox" id="product-1" name="toggle">
<input type="checkbox" id="product-2" name="toggle">
<input type="checkbox" id="product-3" name="toggle">
<input type="checkbox" id="product-4" name="toggle">
<input type="checkbox" id="product-5" name="toggle">

将此“curIndex”值传递给 checkInputs 函数时遇到问题。 这应该在检查输入之前检查输入并获取它的值来执行它。

这个项目只需要 ES5 合成器。

【问题讨论】:

    标签: javascript function input checkbox onchange


    【解决方案1】:

    编辑:ES5 语法方式

    const boxes = document.getElementsByName('toggle');
    
    boxes.forEach(function(box, I) {
      box.onclick = function(e) {
        markPreceding(i);
      };
    });
    
    function markPreceding(i) {
      for (var j = 0; j < boxes.length; j++) {
        if(j <= i) {
          document.getElementById('product-' + (j + 1)).checked = true;
        } else {
          document.getElementById('product-' + (j + 1)).checked = false;
        }
      }
    }
    

    原文:

    试试这个:

    const boxes = document.getElementsByName('toggle');
    
    boxes.forEach((box, i) => {
      box.onclick = (e) => {
        markPreceding(i);
      };
    });
    
    function markPreceding(i) {
      for (var j = 0; j < boxes.length; j++) {
        if(j <= i) {
          document.getElementById(`product-${j + 1}`).checked = true;
        } else {
          document.getElementById(`product-${j + 1}`).checked = false;
        }
      }
    }
    

    由于某种原因,通过document.getElementsByName 返回的NodeList 数组更新输入似乎存在问题。不知道为什么,但这个代码已经过验证。请参阅工作示例 here。

    【讨论】:

    • 有效!但是我的项目需要 ES5 合成器,否则我会找到其他方法来组合它,现在我被我的代码困住了。无论如何 - 非常感谢!
    • 没问题!您希望我发布 ES5 语法版本,以便您可以将其标记为答案吗?
    • 是的,当然!这会很有帮助
    • 完成!我也删除了调试行。希望这会有所帮助!
    • 谢谢,但模板文字是 ES6 合成器。但无论如何,谢谢你的帮助)
    猜你喜欢
    • 1970-01-01
    • 2021-02-16
    • 2017-03-12
    • 2021-08-14
    • 2014-04-27
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多