简体   繁体   English

jQuery 复选框更改和单击事件

[英]jQuery checkbox change and click event

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

Here .change() updates the textbox value with the checkbox status.这里.change()使用复选框状态更新文本框值。 I use .click() to confirm the action on uncheck.我使用.click()来确认取消选中的操作。 If the user selects cancel, the checkmark is restored but .change() fires before confirmation.如果用户选择取消,复选标记将恢复,但.change()在确认之前触发。

This leaves things in an inconsistent state and the textbox says false when the checkbox is checked.这会使 state 不一致,并且在选中复选框时文本框显示为 false。

How can I deal with the cancellation and keep textbox value consistent with the check state?如何处理取消并保持文本框值与检查 state 一致?

Tested in JSFiddle and does what you're asking for.This approach has the added benefit of firing when a label associated with a checkbox is clicked.JSFiddle中测试并执行您的要求。当单击与复选框关联的 label 时,此方法具有触发的额外好处。

Updated Answer:更新答案:

$(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);        
    });
});

Original Answer:原答案:

$(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'));        
    });
});

Demo演示

Use mousedown使用mousedown

$('#checkbox1').mousedown(function() {
    if (!$(this).is(':checked')) {
        this.checked = confirm("Are you sure?");
        $(this).trigger("change");
    }
});

Most of the answers won't catch it (presumably) if you use <label for="cbId">cb name</label> .如果您使用<label for="cbId">cb name</label> ,大多数答案(大概)都不会抓住它。 This means when you click the label it will check the box instead of directly clicking on the checkbox.这意味着当您单击 label 时,它将选中该框,而不是直接单击该复选框。 (Not exactly the question, but various search results tend to come here) (不完全是问题,但各种搜索结果往往会出现在这里)

<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>

In which case you could use:在这种情况下,您可以使用:

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 example with jQuery 1.6.4 jQuery 1.6.4 的 JSFiddle 示例

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 example with the latest jQuery 2.x带有最新 jQuery 2.x 的 JSFiddle 示例

  • Added jsfiddle examples and the html with the clickable checkbox label添加了 jsfiddle 示例和 html 以及可点击的复选框 label

Well.. just for the sake of saving a headache (its past midnight here), I could come up with:好吧..只是为了避免头痛(这里已经过了午夜),我可以想出:

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

Hope it helps希望能帮助到你

For me this works great:对我来说,这很好用:

$('#checkboxID').click(function () {
    if ($(this).attr('checked')) {
        alert('is checked');
    } else {
        alert('is not checked');
    }
})

Here you are给你

Html Html

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

JavaScript 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>

Late answer, but you can also use on("change")迟到的答案,但您也可以使用on("change")

 $('#check').on('change', function() { var checked = this.checked $('span').html(checked.toString()) });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input type="checkbox" id="check"> <span>Check me!</span>

if you are using the iCheck Jquery use the below code如果您使用的是 iCheck Jquery,请使用以下代码

 $("#CheckBoxId").on('ifChanged', function () {
                alert($(this).val());
            });

Get rid of the change event, and instead change the value of the textbox in the click event.摆脱 change 事件,而是在 click 事件中更改文本框的值。 Rather than returning the result of the confirm, catch it in a var.与其返回确认结果,不如在 var 中捕获它。 If its true, change the value.如果为真,则更改该值。 Then return the var.然后返回 var。

Checkbox click and checking for the value in the same event loop is the problem.单击复选框并检查同一事件循环中的值是问题所在。

Try this:尝试这个:

$('#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);
});

Demo: http://jsfiddle.net/mrchief/JsUWv/6/演示: http://jsfiddle.net/mrchief/JsUWv/6/

Try this尝试这个

$('#checkbox1').click(function() {
        if (!this.checked) {
            var sure = confirm("Are you sure?");
            this.checked = sure;
            $('#textbox1').val(sure.toString());
        }
    });
$(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'));
            }
        }
    });
});
// this works on all browsers.

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

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


<div id="check">
    <input type="checkbox" id="checkbox1" />
    <input type="text" id="textbox1" />
</div>

I am not sure why everyone is making this so complicated.我不知道为什么每个人都把事情弄得这么复杂。 This is all I did.这就是我所做的一切。

if(!$(this).is(":checked")){ console.log("on"); }

simply just use the click event my check box id is CheckAll只需使用点击事件我的复选框 id 是 CheckAll

     $('#CheckAll').click(function () {

        if ($('#CheckAll').is(':checked') == true) {

             alert(";)");
      }
    });

get radio value by name名称获取无线电值

 $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });

Try尝试

 checkbox1.onclick= e => { if(.checkbox1.checked) checkbox1?checked =;confirm("Are you sure."). textbox1;value = checkbox1.checked; }
 <input type="checkbox" id="checkbox1" /><br /> <input type="text" id="textbox1" value='false'/>

Try this:尝试这个:

    let checkbox = document.getElementById('checkboxId');
    if (checkbox.checked != true)
    {
        alert("select checkbox");
    }
 $("#person_IsCurrentAddressSame").change(function ()
    {
        debugger
        if ($("#person_IsCurrentAddressSame").checked) {
            debugger

        }
        else {

        }

    })

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

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