简体   繁体   English

选中/取消选中复选框时更改相应标签的文本

[英]change text of corresponding label when checkbox is checked/unchecked

I can't get this javascript function to work.我无法让这个 javascript 函数工作。 Any help would be much appreciated!任何帮助将非常感激!


<input type="checkbox" class="checkit" name="smoking" id="smoking" value="1" onclick="yesno('smoking','yesnos');" /><label for="smoking" name="yesnos" id="yesnos">No</label>

        function yesno(thecheckbox, thelabel){
            var checkboxvar = document.getElementById(thecheckbox);
            var labelvar = document.getElementById(thelabel);
            if (checkboxvar.checked == false){
                document.getElementById(labelvar).innerHTML = "No";
            }
            else{
                document.getElementById(labelvar).innerHTML = "Yes";
            }
        }

I changed your code to this and it seems to work: 我将您的代码更改为此,它似乎可以工作:

function yesno(thecheckbox, thelabel) {

    var checkboxvar = document.getElementById(thecheckbox);
    var labelvar = document.getElementById(thelabel);
    if (!checkboxvar.checked) {
        labelvar.innerHTML = "No";
    }
    else {
        labelvar.innerHTML = "Yes";
    }
}

See here on jsFiddle 看到这里 jsFiddle

You can also make it shorter and more readable like so: 您还可以使其更短,更易读,如下所示:

<input type="checkbox" class="checkit" 
  name="smoking" id="smoking" value="1" onclick="yesno(this, 'yesnos');" />
<label for="smoking" name="yesnos" id="yesnos">No</label>


function yesno(chk, label) {
    document.getElementById(label).innerHTML = chk.checked ? "Yes" : "No";
}

getElementById takes a string, not an Element. getElementById使用字符串,而不是Element。 I'm assuming you're passing strings to the yesno function... 我假设您正在将字符串传递给yesno函数...

One problem is that document.getElementById() should take in thelabel, NOT labelvar. 一个问题是document.getElementById()应该带有标签,而不是labelvar。

Also, make sure your checkbox and "label" (whatever HTML element it is) have an id="" attribute. 另外,请确保您的复选框和“标签”(无论它是什么HTML元素)都具有id =“”属性。

The problem is caused by passing labelvar to document.getElementById. 该问题是由于将labelvar传递给document.getElementById引起的。 You've already retrieved a reference to the element by setting var labelvar = document.getElementById so your if statement can be changed to 您已经通过设置var labelvar = document.getElementById来检索对元素的引用,因此可以将if语句更改为

if (checkboxvar.checked == false){
  labelvar.innerHTML = "No";
}
else{
  labelvar.innerHTML = "Yes";
}

I've made a pure JS version in jsfiddle here: http://jsfiddle.net/Zikes/wpwEW/ 我在jsfiddle中制作了一个纯JS版本: http : //jsfiddle.net/Zikes/wpwEW/

If you're using a framework like jQuery I can make that look a bit cleaner. 如果您使用的是jQuery之类的框架,则可以使它看起来更简洁。 Otherwise you'll need to modify it to use attachEvent if available for IE's sake. 否则,如果为了IE而可用,则需要对其进行修改以使用attachEvent。

You were close but you are calling getElementById() on an element that you already have.. 您已经接近,但是您正在对已经具有的元素调用getElementById()

Try this 尝试这个

        function yesno(thecheckbox, thelabel){
            var checkboxvar = document.getElementById(thecheckbox);
            var labelvar = document.getElementById(thelabel);
            if (checkboxvar.checked == false){
                labelvar.innerHTML = "No";
            }
            else{
                labelvar.innerHTML = "Yes";
            }
        }

Working example: http://jsfiddle.net/QmkDB/ 工作示例: http : //jsfiddle.net/QmkDB/

As i would use it now a day!因为我现在每天都会使用它!

 document.querySelectorAll('input[type="checkbox"]').forEach(function(checkbox) { checkbox.addEventListener('change', function (event) { let checkboxLabel = document.querySelector('label[for="'+checkbox.name+'"]'); if (checkboxLabel) checkboxLabel.textContent = checkbox.checked?"ON":"OFF"; }); });
 <input type="checkbox" name="myCheckbox"> <label for="myCheckbox">OFF</label>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM