Флажок Javascript onChange

131

У меня есть флажок в форме, и я бы хотел, чтобы он работал по следующему сценарию:

  • если кто-то его проверит, значение textfield ( totalCost) должно быть установлено на 10.
  • затем, если я вернусь и сниму флажок, функция calculate()установит значение в totalCostсоответствии с другими параметрами в форме.

По сути, мне нужна часть, где, когда я устанавливаю флажок, я делаю одно, а когда снимаю флажок, я делаю другое.

bikey77
источник
Checkboxid.Checked == true / false {Напишите свое событие}.
Нареш

Ответы:

152
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
2
lol, используйте это из javascript $ ('# checkbox'). attr ('проверено', 'проверено'); $ ( '# Флажок') нажмите ().
Сенад Мешкин,
5
Вместо этого вы должны использовать onchange, он специально разработан для варианта использования OP. (спасибо ReeCube за ссылку ниже) developer.mozilla.org/en-US/docs/Web/Events/change
Армандо,
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" />

Vic
источник
28

Если вы используете jQuery ... то я могу предложить следующее: ПРИМЕЧАНИЕ. Я сделал здесь некоторые предположения.

$('#my_checkbox').click(function(){
    if($(this).is(':checked')){
        $('input[name="totalCost"]').val(10);
    } else {
        calculate();
    }
});
Лянлян Чжэн
источник
19

Используйте событие onclick, потому что каждый щелчок по флажку фактически меняет его.

SergeS
источник
29
Что, если пользователь использует клавиатуру?
thomthom
14
Это strage, но все равно щелчок
SergeS
6
Действительно, щелчок работает, он даже срабатывает, когда вы используете ярлык для переключения флажка. Но лучше использовать событие «изменение»! Событие 'change' предназначено для этого: developer.mozilla.org/en-US/docs/Web/Events/change
ReeCube 01
А как насчет двойного щелчка?
Chalky
4
Что ж, теперь два клика, не так ли?
Rohmer
14

Следующее решение использует jquery. Предположим, у вас есть флажок с идентификатором 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

Ссылка на флажок по его идентификатору, а не с помощью # Назначьте функцию атрибуту 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>

Идентификаторы ваших флажков будут представлены в виде строки «1,2» в переменной результата. Затем вы можете разбить его на уровне контроллера, как хотите.

Брюс Тонг
источник
0

Javascript

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

0x1ad2
источник
0

пытаться

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

Камил Келчевски
источник