자바 스크립트 확인란 onChange


130

양식에 확인란이 있으며 다음 시나리오에 따라 작동하도록하고 싶습니다.

  • 누군가 확인하면 텍스트 필드 ( totalCost) 의 값을 로 설정해야합니다 10.
  • 그런 다음 돌아가서 선택을 취소하면 함수 calculate()totalCost다른 매개 변수에 따라 값을 양식으로 설정합니다.

따라서 기본적으로 확인란을 선택할 때 한 가지 작업을 수행하고 선택 해제하면 다른 작업을 수행하는 부분이 필요합니다.


Checkboxid.Checked == true / false {이벤트 쓰기}.
Naresh

답변:


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에서 이벤트를 트리거합니다.
로마 Starkov

4
불행히도 JavaScript를 통해 확인란 상태가 변경되면 이벤트가 트리거되지 않습니다.
StanE

2
lol, 이것을 자바 스크립트에서 사용하십시오 $ ( '# checkbox'). attr ( 'checked', 'checked'); $ ( '# checkbox'). click ();
Senad Meškin 2016 년

5
대신 onchange를 사용해야합니다. OP의 사용 사례를 위해 특별히 설계되었습니다. (링크에 대한 ReeCube 감사) developer.mozilla.org/en-US/docs/Web/Events/change
Armando

90

순수한 자바 스크립트 :

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
그것은
계단

6
실제로 클릭이 작동하면 레이블을 사용하여 확인란을 전환하면 시작됩니다. 그러나 'change'이벤트를 더 잘 사용해야합니다! 'change'이벤트는이를위한 것입니다 : developer.mozilla.org/en-US/docs/Web/Events/change
ReeCube

더블 클릭은 어떻습니까?
Chalky

4
글쎄, 지금 두 번의 클릭이 아닌가?
Rohmer

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로 확인란을 참조하십시오. # change 속성을 사용하는 대신 onclick 속성에 함수를 할당하십시오.

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

자바 스크립트

  // 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();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.