【问题标题】:Why does the e.preventDefault function in javascript not work for the checkbox? [closed]为什么javascript中的e.preventDefault函数不适用于复选框? [关闭]
【发布时间】:2019-10-12 06:07:28
【问题描述】:

在编写代码时,我遇到了我自己无法解决的问题。好吧,它对我不起作用if (checkbox.checked == false),但if (checkbox.checked == true) 起作用,即使未选中复选框。 我在 Opera 和 Edge 上查看过。这是个常见的问题吗?有没有办法解决这个问题?

JSFiddle:[https://jsfiddle.net/mk5j6170/)

【问题讨论】:

  • document.querySelecotr 拼写在编程中很重要。在询问为什么无法正常工作之前,请务必检查您的浏览器控制台是否有错误。解决这个问题,你的代码就可以工作了。您还应该始终在minimal reproducible example 中发布所有相关代码问题本身
  • 对 SO 的正确反应告诉你如果没有 also 发布相关代码就不能发布 jsFiddle 链接 in 问题不是要标记将链接作为代码。如果您希望网站上的人帮助您,请遵守网站的规则。您问题的全部内容(包括任何必要的代码)必须您的问题中,而不仅仅是链接。请在问题中添加minimal reproducible example in。更多:How do I ask a good question?Something in my web site or project doesn't work. Can I just paste a link to it?
  • 您可以使用 Stack Snippets([<>] 工具栏按钮;here's how to do one)使您的 MCVE 可现场运行
  • 很抱歉,这是重写代码时的一个简单错误。它仍然没有解决我的问题,因为“checkboc.checked”功能不起作用。
  • 我们都知道编程。问题是,如果不问一个明确的问题,很难帮助你。把自己放在我的位置上——我对你的问题一无所知,想帮你解决它。我的帮助只会与您给我的问题描述一样好。在这种情况下,您的描述非常糟糕,这让我很难提供帮助。我们需要您提供尽可能多的信息的实际问题描述。例如你说"checkboc.checked" function does not work - 我必须问自己“不工作”是什么意思?究竟是什么问题

标签: javascript html browser


【解决方案1】:

您的代码中有拼写错误:querySelecotr 应该是 querySelector。 您还可以使用 getElementById 通过其 id-property 获取元素。

这两个版本都可以在我测试过的浏览器中运行(Firefox、Chrome、Safari)

如果您使用preventDefault(),检查状态将在事件处理程序完成后恢复。因此,该事件处理程序内部的任何更改都将被还原。一种解决方法是在 setTimeout-call 中切换状态(参见下面的 checkbox3-example)

let idCheckbox = document.getElementById("checkbox");
idCheckbox.addEventListener("click", function(e) {
  e.preventDefault();
});


let idCheckbox2 = document.querySelector("#checkbox2");
idCheckbox2.addEventListener("click", function (e) {
  e.preventDefault();
});

let idCheckbox3 = document.querySelector("#checkbox3");
idCheckbox3.addEventListener("click", function (e) {
  e.preventDefault();
  setTimeout(() => {
    if (idCheckbox3.checked == false) {
      idCheckbox3.checked = true;
    } else {
      idCheckbox3.checked = false;
    }
  }, 50);
});
<input id="checkbox" name="checkbox" type="checkbox"/>
<label class="sub-label" for="checkbox">Accept checkbox 1</label>
<br>
<input id="checkbox2" name="checkbox2" type="checkbox"/>
<label class="sub-label" for="checkbox2">Accept checkbox 2</label>
<br>
<input id="checkbox3" name="checkbox3" type="checkbox"/>
<label class="sub-label" for="checkbox3">Accept checkbox 3</label>
<br>

【讨论】:

  • 试试:var idCheckbox = document.querySelector("#checkbox"); idCheckbox.addEventListener("click", function (e) { e.preventDefault(); if(idCheckbox.checked == false){ idCheckbox.checked = true; }else{ idCheckbox.checked = false; } }, false);
  • 我在我的回答中包含了那个版本。这两个版本都适用于我最近使用的所有浏览器(Firefox、Chrome、Safari)。
  • 如果我双击,歌剧在 EDGE 上无法运行
  • 您的代码中有拼写错误:querySelecotr
  • "e.preventDefault ()" in jsfiddle 没有工作,因为我犯了一个错误但在Opera和EDGE中仍然不起作用(checkbox.checked == true / false),(checkbox.checked =真/假)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多