JavaScript复选框onChange


130

我的表单中有一个复选框,我希望它根据以下情况工作:

  • 如果有人检查,totalCost则应将textfield()的值设置为10
  • 然后,如果我返回并取消选中它,则函数会根据表单中的其他参数calculate()设置值totalCost

因此,基本上,我需要以下部分:当我选中复选框时,我要做一件事;而当我取消选中它时,我又做了另一件事。


Checkboxid.Checked == true / false {编写您的事件}。
Naresh

Answers:


150
function calc()
{
  if (document.getElementById('xxx').checked) 
  {
      document.getElementById('totalCost').value = 10;
  } else {
      calculate();
  }
}

的HTML

<input type="checkbox" id="xxx" name="xxx" onclick="calc();"/>

30
如果用户使用键盘?
thomthom

6
这是一个JsFiddle,可以在其中测试所有不同的方式:单击,键盘,标签和访问键。它们都在Firefox中触发事件。
罗曼·斯塔科夫

4
不幸的是,当复选框状态通过JavaScript更改时,不会触发该事件。
StanE 2015年

2
大声笑,请从javascript $('#checkbox')。attr('checked','checked');中使用它;$('#checkbox')。click();
SenadMeškin15年6

5
您应该改用onchange,它是专门为OP用例设计的。(感谢下面的ReeCube提供链接)developer.mozilla.org/en-US/docs/Web/Events/change
Armando

90

纯JavaScript:

const checkbox = document.getElementById('myCheckbox')

checkbox.addEventListener('change', (event) => {
  if (event.target.checked) {
    alert('checked');
  } else {
    alert('not checked');
  }
})
My Checkbox: <input id="myCheckbox" type="checkbox" />


28

如果您使用的是jQuery ..那么我可以建议以下内容:注意:我在这里做了一些假设

$('#my_checkbox').click(function(){
    if($(this).is(':checked')){
        $('input[name="totalCost"]').val(10);
    } else {
        calculate();
    }
});

19

使用onclick事件,因为对复选框的每次单击实际上都会对其进行更改。


29
如果用户使用键盘怎么办?
thomthom

14
它是阶段性的,但仍然是点击
SergeS 2013年

6
实际上,单击是有效的,当您使用标签切换复选框时,它甚至会被触发。但是您最好使用'change'事件!“更改”事件的目的是这样的:developer.mozilla.org/en-US/docs/Web/Events/change
ReeCube 2015年

双击呢?
Chalky

4
好吧,现在是两次点击,不是吗?
罗默

13

以下解决方案利用了jquery。假设您有一个ID为的复选框checkboxId

const checkbox = $("#checkboxId");

checkbox.change(function(event) {
    var checkbox = event.target;
    if (checkbox.checked) {
        //Checkbox has been checked
    } else {
        //Checkbox has been unchecked
    }
});

4

HTML:

<input type="checkbox" onchange="handleChange(event)">

JS:

function handleChange(e) {
     const {checked} = e.target;
}

3

通过ID而不是#来引用复选框。#将函数分配给onclick属性,而不是使用change属性

var checkbox = $("save_" + fieldName);
checkbox.onclick = function(event) {
    var checkbox = event.target;

    if (checkbox.checked) {
        //Checkbox has been checked
    } else {
        //Checkbox has been unchecked
    }
};

1

我知道这似乎是菜鸟的答案,但我将其放在此处,以便将来可以为他人提供帮助。

假设您正在使用foreach循环构建表。并同时在最后添加复选框。

<!-- Begin Loop-->
<tr>
 <td><?=$criteria?></td>
 <td><?=$indicator?></td>
 <td><?=$target?></td>
 <td>
   <div class="form-check">
    <input type="checkbox" class="form-check-input" name="active" value="<?=$id?>" <?=$status?'checked':''?>> 
<!-- mark as 'checked' if checkbox was selected on a previous save -->
   </div>
 </td>
</tr>
<!-- End of Loop -->

您在表格下方放置一个带有隐藏输入的按钮:

<form method="post" action="/goalobj-review" id="goalobj">

 <!-- we retrieve saved checkboxes & concatenate them into a string separated by commas.i.e. $saved_data = "1,2,3"; -->

 <input type="hidden" name="result" id="selected" value="<?= $saved_data ?>>
 <button type="submit" class="btn btn-info" form="goalobj">Submit Changes</button>
</form>

您可以这样编写脚本:

<script type="text/javascript">
    var checkboxes = document.getElementsByClassName('form-check-input');
    var i;
    var tid = setInterval(function () {
        if (document.readyState !== "complete") {
            return;
        }
        clearInterval(tid);
    for(i=0;i<checkboxes.length;i++){
        checkboxes[i].addEventListener('click',checkBoxValue);
    }
    },100);

    function checkBoxValue(event) {
        var selected = document.querySelector("input[id=selected]");
        var result = 0;
        if(this.checked) {

            if(selected.value.length > 0) {
                result = selected.value + "," + this.value;
                document.querySelector("input[id=selected]").value = result;
            } else {
                result = this.value;
                document.querySelector("input[id=selected]").value = result;
            }
        }
        if(! this.checked) { 

// trigger if unchecked. if checkbox is marked as 'checked' from a previous saved is deselected, this will also remove its corresponding value from our hidden input.

            var compact = selected.value.split(","); // split string into array
            var index = compact.indexOf(this.value); // return index of our selected checkbox
            compact.splice(index,1); // removes 1 item at specified index
            var newValue = compact.join(",") // returns a new string
            document.querySelector("input[id=selected]").value = newValue;
        }

    }
</script>

复选框的ID将在结果变量中以字符串“ 1,2”的形式提交。然后,您可以根据需要在控制器级别对其进行分解。


0

Java脚本

  // on toggle method
  // to check status of checkbox
  function onToggle() {
    // check if checkbox is checked
    if (document.querySelector('#my-checkbox').checked) {
      // if checked
      console.log('checked');
    } else {
      // if unchecked
      console.log('unchecked');
    }
  }

的HTML

<input id="my-checkbox" type="checkbox" onclick="onToggle()">


0

尝试

totalCost.value = checkbox.checked ? 10 : calculate();

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.