【问题标题】:JavaScript: Is there a reason that console.log works but not return?JavaScript:console.log 工作但不返回是否有原因?
【发布时间】:2021-01-12 02:55:33
【问题描述】:

我试图让一个复选框返回 1 或 0,具体取决于它是否被选中。我很难理解为什么这个 if 函数的返回不起作用。如果我使用 console.log 而不是 return 输出是正确的。选中时为 1 未选中时为 0。使用 return,checked 被跳过,它只返回 else 语句,所以它是 0,无论是选中还是未选中。我一般是编码新手,所以我确定我在这里遗漏了一些简单的东西。有任何想法吗?谢谢!

document.getElementById("materialLoaded").addEventListener('input', materialCheck);

function materialCheck() {

    if (this.checked) {
        return 1;
    } else {
        return 0;
    }
}

【问题讨论】:

  • return 到底应该做什么?
  • 它应该返回到哪里?你是在告诉浏览器:请在未来有输入事件时运行这个函数。结果在你调用addEventListener之后很久才出现
  • console.log 将登录到控制台(顾名思义),而 return 只是结束函数并将值传递给调用该函数的任何对象。由于您没有使用该返回值,因此您不会看到任何东西,但它产生的。
  • 这感觉像是 X/Y 问题。
  • 是的,我猜这是一个 X/Y 问题。当检查三个复选框时,我尝试获取HTML元素以从红色更改为绿色。所以我试图对返回做的是在每次注册新输入时传递一个复选框的新值,这样我就可以在另一个函数中使用该值,当所有三个复选框都被选中时,它将改变 HTML 元素的颜色.反正这是我的想法。这可能是处理此类事情的完全错误的方法,但我想我会尝试一下,看看它会去哪里。

标签: javascript return iif-function


【解决方案1】:

您在 cmets 中说过要查看检查了多少个复选框。因此,在复选框中添加一个事件侦听器(或使用事件委托),并使用一个简单的选择器查看有多少被选中。

基本概念:

const wrapper = document.querySelector("#wrapper");

const validateCheckboxes = function() {
  const checked = document.querySelectorAll(".chk:checked");
  const isValid = checked.length === 3;
  wrapper.classList.toggle("valid", isValid);
};

wrapper.addEventListener("change", validateCheckboxes);
.valid {
  background-color: green;
}
<div id="wrapper">
  <input type="checkbox" class="chk" />
  <input type="checkbox" class="chk" />
  <input type="checkbox" class="chk" />
  <input type="checkbox" class="chk" />
  <input type="checkbox" class="chk" />
  <input type="checkbox" class="chk" />
  <input type="checkbox" class="chk" />
  <input type="checkbox" class="chk" />
</div>

【讨论】:

  • 我的天哪,哈哈,这比我尝试做的更干净、更简单。也更有意义。谢谢 epascarello!
【解决方案2】:

肯定你不会看到任何东西,因为你没有告诉你的程序告诉你任何事情。 您是在告诉它在函数中返回一个值,但要查看它返回的值,您必须调用该函数。 例如查看你的返回值使用你的窗口调用函数:

 document.getElementById("materialLoaded").addEventListener('input', materialCheck);

function materialCheck() {

if (this.checked) {
    return 1;
} else {
    return 0;
}

window.alert(materialCheck());
 }

javascript是面向对象的,你不能写一个函数,它应该自己工作,它必须被调用。 console.log 之所以有效,是因为那里有一个对象,它是控制台调用该函数或显示您要求的内容(例如:console.log(“hello”))

【讨论】:

  • 现在我明白了。抱歉,我实际上只是将调用函数从问题中提供的代码中删除了。我手动告诉控制台运行 materialCheck() 并忘记将其添加到示例代码本身。尽管如此,它并没有返回任何我感到困惑的部分。
  • @maccollaflower 让我解释一下,基本上“返回”给你一个值(返回一个值),但不像 console.log 那样显示在你的屏幕上,它显示你控制台中返回的值跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 2020-10-15
  • 2018-07-02
  • 1970-01-01
  • 2016-10-16
相关资源
最近更新 更多