远程选中复选框时未检测到复选框更改

时间:2017-11-06 15:28:58

标签: jquery checkbox onchange

我有两个复选框。检查第一个时,我强制要检查第二个。选中第二个时,我想切换一条消息。但是当检查第一个事件时,在第二个时间内未检测到更改事件:



$(document).ready(function(){
	$("#first").change(function(){
		if ($(this).is(":checked")){
			$("#second").prop('checked', true).attr("disabled","disabled");
		} else {
			$("#second").prop('checked', false).removeAttr("disabled");
		}
	});
	
	
	$("#second").change(function(){
		if ($(this).is(":checked")){
			$("#alert").show();
		} else {
			$("#alert").hide();
		}
	})
})

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="first" type="checkbox">first &nbsp;&nbsp;&nbsp;
<input id="second" type="checkbox">second
<br><br>
<div id="alert" style="display:none">This is an alert</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您的方法无法按预期工作,因为当您动态设置某些内容时,其事件不会像鼠标点击一样发送。

因此,您需要手动调度该事件。

在jQuery中,您可以使用.trigger()

$(document).ready(function(){
    $("#first").change(function(){
        if ($(this).is(":checked")){
            $("#second").prop('checked', true).attr("disabled","disabled");
        } else {
            $("#second").prop('checked', false).removeAttr("disabled");
        }

        // ADDED THIS LINE
        $('#second').trigger('change');
    });
	
	
    $("#second").change(function(){
        if ($(this).is(":checked")){
            $("#alert").show();
        } else {
            $("#alert").hide();
        }
    })
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="first" type="checkbox">first &nbsp;&nbsp;&nbsp;
<input id="second" type="checkbox">second
<br><br>
<div id="alert" style="display:none">This is an alert</div>

答案 1 :(得分:0)

对dom元素的逻辑更改不会生成事件。如果您希望事件在事件之后运行trigger('change')以生成事件。