在项目中需要实现这样一个功能。当checkbox选中的时候,那么文本框是可以输入的,否则就不可以输入。
在实现的时候,我使用了jquery1.8.3,代码如下:
<body>
<div>
<input type="checkbox" class="agreen" style="" />
<input type="text" class="item" disabled>
<input type="button" id="change" value="click me ">
</div>
<script src="js/jquery-1.8.3.min.js"></script>
<script>
var $text=$(".item");
var $checkbox=$(".agreen");
var $button=$("#change");
$checkbox.on("click",function(){
if($(this).prop("checked")){
$text.prop("disabled",false);
}else{
$text.prop("disabled",true);
}
});
$checkbox.click();
$button.on("click",function(){
$checkbox.click();
});
</script>
</body>
在调试的时候发现$checkbox.click();
只能触发checkbox选中,而不能使文本框可输入,问题在于在该版本中存在这样一个bug:当使用 $checkbox.click();
去执行click的回调函数的时候,此时的checkbox的并没有被选中,当整个回调执行完成之后,checkbox才会被选中,此时的prop(“checked”)才会为true。而我们需要实现的效果是,在click回调函数执行之前,checkbox已经被选中,prop(“checked”)为true,
此时有两个方法解决该bug。
方法一:将$checkbox.on("click",function(){})
变为侦听 change
事件。因为在1.8.3的jq中,$checkbox.click();
首先触发click事件,执行click事件回调函数,然后再触发change事件,实际上只有change事件才会改变checkbox的选中状态。
方法二:使用高版本的jq。例如2.0版本。jq修复了这个bug。
推荐使用第一种方法,因为对于这checkbox,radio,select而引发的联动操作,需要考虑监听值的变换事件,而不是交互事件。