如何在纯JS中使用onclick事件来checkuncheck一个复选框?

问题描述 投票:0回答:7

这是我的代码。

function toggleOffer() {
    let toggleButton = document.getElementById("select-time");
    if (toggleButton.checked = true){
        toggleButton.checked= false;
    }else{
        toggleButton.checked= true;
    }
}
<div>
   <p onclick="toggleOffer()">1 mois</p>
   <input type="checkbox" id="select-time" checked>
   <p onclick="toggleOffer()">12 mois</p>
</div>

它的工作原理是:当我的复选框被选中时,我点击了其中一个 <p>勾选框会被取消勾选,但我不能用另一种方式来工作。

javascript checkbox checked
7个回答
0
投票

你有问题是因为你使用了一个赋值操作符。=,当一个比较运算符。== 是合适的,正如其他一些人所说。

因此,下面的修正后的javascript应该可以使用。

function toggleOffer() {
  let toggleButton = document.getElementById("select-time");
  if (toggleButton.checked == true) {
    toggleButton.checked = false;
  } else {
    toggleButton.checked = true;
  }
}

事实上,根本不需要使用... ... == true== false 反正在javascript中。你可以把你的代码进一步简化成这样。

function toggleOffer() {
  let toggleButton = document.getElementById("select-time");
  if (toggleButton.checked) {
    toggleButton.checked = false;
  } else {
    toggleButton.checked = true;
  }
}

或者,由于 .checked 属性在javascript中工作。

function toggleOffer() {
  toggleButton.checked = !toggleButton.checked;
}

这总是将复选框设置为相反的布尔值,这和切换复选框是一样的。


但我还想补充的是,你可以完全不用javascript来实现这种行为,使用 label 元素。

这将是我首选的方式。

<div>
   <label for="select-time">1 mois</label>
   <input type="checkbox" id="select-time" checked>
   <label for="select-time">12 mois</label>
</div>

改变你的 p 要素 label,并增加一个 for 属性,指定了 id 的复选框。

在你的情况下, for="select-time" 因为你希望这两个标签都能切换复选框,所以'toggleButton.checked = true'是在设置值,而不是比较值,你需要做的是修改如下。


0
投票

'toggleButton.checked = true'是在设置值而不是比较值,你需要做的是把它改成下面的样子。if(toggleButton.checked === true){...或者因为是布尔值,所以只需这样做就可以了if(toggleButton.checked){...

我甚至建议更简单的方法是这样做,而不是这样做。

if (toggleButton.checked === true){
    toggleButton.checked= false;
}else{
    toggleButton.checked= true;
}

就这样 toggleButton.checked = !toggleButton.checked


0
投票

你在if语句中设置了checked的值,而不是检查它。

你可以在 if 语句中删除比较。

if (toggleButton.checked) { ... }

或者用====代替

if (toggleButton.checked === true) { ... }

0
投票

你可以尝试用'! '来反转布尔值(truefalse)。

toggleButton.check = !toggleButton.check

!toggleButton.check 是反向的 toggleButton.check

对你来说,它是这样的

function toggleOffer() {
    let toggleButton = document.getElementById("select-time");
    toggleButton.check = !toggleButton.check
}

0
投票

使用 if(toggleButton.checked===true) 而不是 if(toggleButton.checked=true)


0
投票
function toggleOffer() {
        let toggleButton = document.getElementById("select-time");
        if(!toggleButton) return;
        toggleButton.checked = !toggleButton.checked;
    }

或者一次过

<p onclick="((el)=>{el.checked = !el.checked})(document.getElementById('select-time') || {})">12 mois</p>

0
投票

用你当前的javascript代码替换它,就可以工作了。

const toggleButton = document.getElementById("select-time");

function toggleOffer() {
  if (toggleButton.checked == true){
    toggleButton.checked= false;
  } else {
    toggleButton.checked= true;
  }
}

0
投票

除了这个问题之外 toggleButton.checked = true 应是 toggleButton.checked === true (或只是 toggleButton.checked)一般来说,它是 不是个好主意 来使用内联事件处理程序。尝试在文档中添加事件处理,并使用 活动代表团. 类似(函数简化)。

document.addEventListener("click", toggleOffer);

function toggleOffer(evt) {
  if (evt.target.dataset.offer) {
    const checkBox = document.querySelector("#select-time");
    checkBox.checked = !checkBox.checked;
  }
}
p[data-offer] {
  cursor: pointer;
}
<p data-offer="0">1 mois</p>
<input type="checkbox" id="select-time" checked>
<p data-offer="1">12 mois</p>
© www.soinside.com 2019 - 2024. All rights reserved.