JQuery флажок изменить и щелкнуть событие - PullRequest
512 голосов
/ 11 августа 2011

$(document).ready(function() {
  //set initial state.
  $('#textbox1').val($(this).is(':checked'));

  $('#checkbox1').change(function() {
    $('#textbox1').val($(this).is(':checked'));
  });

  $('#checkbox1').click(function() {
    if (!$(this).is(':checked')) {
      return confirm("Are you sure?");
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" id="checkbox1"/><br />
<input type="text" id="textbox1"/>

Здесь .change() обновляет значение текстового поля со статусом флажка. Я использую .click(), чтобы подтвердить действие по снятию отметки. Если пользователь выбирает «Отмена», флажок восстанавливается, но перед подтверждением срабатывает .change().

Это оставляет вещи в несовместимом состоянии, и текстовое поле говорит ложь, когда флажок установлен.

Как я могу справиться с отменой и сохранить значение текстового поля в соответствии с состоянием проверки?

Ответы [ 17 ]

815 голосов
/ 11 августа 2011

Ну, я не вижу ответ, который соответствует моему, поэтому я опубликую это.Протестировано в JSFiddle и выполняет то, что вы просите. Этот подход имеет дополнительное преимущество - срабатывание при нажатии на ярлык, связанный с флажком.

Оригинальный ответ:

$(document).ready(function() {
    //set initial state.
    $('#textbox1').val($(this).is(':checked'));

    $('#checkbox1').change(function() {
        if($(this).is(":checked")) {
            var returnVal = confirm("Are you sure?");
            $(this).attr("checked", returnVal);
        }
        $('#textbox1').val($(this).is(':checked'));        
    });
});

Обновленный ответ:

$(document).ready(function() {
    //set initial state.
    $('#textbox1').val(this.checked);

    $('#checkbox1').change(function() {
        if(this.checked) {
            var returnVal = confirm("Are you sure?");
            $(this).prop("checked", returnVal);
        }
        $('#textbox1').val(this.checked);        
    });
});
86 голосов
/ 11 августа 2011

Демо

Использование mousedown

$('#checkbox1').mousedown(function() {
    if (!$(this).is(':checked')) {
        this.checked = confirm("Are you sure?");
        $(this).trigger("change");
    }
});
46 голосов
/ 13 февраля 2013

Большинство ответов не поймут это (предположительно), если вы используете <label for="cbId">cb name</label>.Это означает, что при нажатии на ярлык будет установлен флажок, а не непосредственно установлен флажок.(Не совсем вопрос, но различные результаты поиска, как правило, приходят сюда)

<div id="OuterDivOrBody">
    <input type="checkbox" id="checkbox1" />
    <label for="checkbox1">Checkbox label</label>
    <br />
    <br />
    The confirm result:
    <input type="text" id="textbox1" />
</div>

В этом случае вы можете использовать:

Earlier versions of jQuery:

$('#OuterDivOrBody').delegate('#checkbox1', 'change', function () {
    // From the other examples
    if (!this.checked) {
        var sure = confirm("Are you sure?");
        this.checked = !sure;
        $('#textbox1').val(sure.toString());
    }
});

Пример JSFiddle с jQuery 1.6.4

jQuery 1.7+

$('#checkbox1').on('change', function() { 
    // From the other examples
    if (!this.checked) {
        var sure = confirm("Are you sure?");
        this.checked = !sure;
        $('#textbox1').val(sure.toString());
    }
});

Пример JSFiddle с последней версией jQuery 2.x

  • Добавлены примеры jsfiddle и HTML-код с активируемой меткой флажка
24 голосов
/ 11 августа 2011

Ну ... просто ради сохранения головной боли (здесь уже полночь) я мог бы придумать:

$('#checkbox1').click(function() {
  if (!$(this).is(':checked')) {
    var ans = confirm("Are you sure?");
     $('#textbox1').val(ans);
  }
});

Надеюсь, это поможет

10 голосов
/ 10 июля 2014

Вот вы

HTML

<input id="ProductId_a183060c-1030-4037-ae57-0015be92da0e" type="checkbox" value="true">

JavaScript

<script>
    $(document).ready(function () {

      $('input[id^="ProductId_"]').click(function () {

        if ($(this).prop('checked')) {
           // do what you need here     
           alert("Checked");
        }
        else {
           // do what you need here         
           alert("Unchecked");
        }
      });

  });
</script>
10 голосов
/ 20 августа 2013

Для меня это прекрасно работает:

$('#checkboxID').click(function () {
    if ($(this).attr('checked')) {
        alert('is checked');
    } else {
        alert('is not checked');
    }
})
6 голосов
/ 29 января 2018

если вы используете iCheck Jquery, используйте следующий код

 $("#CheckBoxId").on('ifChanged', function () {
                alert($(this).val());
            });
6 голосов
/ 11 августа 2011

Избавьтесь от события изменения и вместо этого измените значение текстового поля в событии щелчка.Вместо того, чтобы возвращать результат подтверждения, перехватите его в переменной.Если это правда, измените значение.Затем верните переменную.

6 голосов
/ 11 августа 2011

Проверка флажка и проверка значения в том же цикле событий - проблема.

Попробуйте это:

$('#checkbox1').click(function() {
    var self = this;
    setTimeout(function() {

        if (!self.checked) {
            var ans = confirm("Are you sure?");
            self.checked = ans;
            $('#textbox1').val(ans.toString());
        }
    }, 0);
});

Демонстрация: http://jsfiddle.net/mrchief/JsUWv/6/

5 голосов
/ 11 августа 2011
$(document).ready(function() {
    //set initial state.
    $('#textbox1').val($(this).is(':checked'));

    $('#checkbox1').change(function() {
        $('#textbox1').val($(this).is(':checked'));
    });

    $('#checkbox1').click(function() {
        if (!$(this).is(':checked')) {
            if(!confirm("Are you sure?"))
            {
                $("#checkbox1").prop("checked", true);
                $('#textbox1').val($(this).is(':checked'));
            }
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...