阻止复选框道具“checked”更新
Prevent checkbox prop `checked` from updating
如何防止<input type="checkbox">
元素的.checked属性发生更改?
jsFiddle
我希望此代码在单击复选框时提醒false
,但它提醒true
。
var $elem = $('input');
function handleToggle(event) {
event.preventDefault();
event.stopPropagation();
alert(event.target.checked);
}
$elem.bind('change click', handleToggle);
您似乎对preventDefault
的作用抱有错误的期望。它只是设置一个标志,以便事件处理引擎知道在事件处理程序1被处理后该做什么。
如果cancellable属性值为true,则preventDefault()方法必须设置cancelled标志。
这里解释了如何处理事件:
- 对元素运行单击前激活步骤
- 在元素上激发单击事件。[…]
- 如果未取消此单击事件,请对元素运行单击后激活步骤
- 如果事件被取消,则用户代理必须对元素运行已取消的激活步骤
这是点击复选框时发生的情况的说明:
如果元素是可变的,那么:点击前激活步骤包括将元素的checkness设置为其相反的值(即,如果为true,则为true,如果为false),以及将元素的不确定IDL属性设置为false。取消的激活步骤包括将checkness和元素的不确定IDL属性设置回运行点击前激活步骤之前的值。
因此,您可以看到,在执行事件处理程序之前,元素的checked
属性被设置为相反的值,并且只有在事件被取消时才被设置为原始值。但该过程是在事件处理程序之后运行的。
1:它似乎不是在当前事件处理程序本身之后,而是在应该执行的所有事件处理程序之后。
当检查的属性的状态已更改为true时,会调用该事件。如果您想始终将复选框标记为false,则必须设置一个条件。尽管我看不出这样做有什么意义。
var $checkbox = $('input[type="checkbox"]');
function handleToggle(event) {
event.preventDefault();
event.stopPropagation();
if(event.target.checked === true) {
event.target.checked = false;
}
alert(event.target.checked);
}
$checkbox.bind('change click', handleToggle);
干杯!
在HTML中只需在输入元素中添加"disabled"。
相关文章:
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- Angular:更新一次性绑定的数据
- Javascript更新孙窗口中的表单元素
- 使用AngularJS中的筛选器更新给定的表
- 从选项页面更新chrome扩展清单权限
- 如何在不刷新页面的情况下更新显示框
- 延期承诺值未更新/解析/延期
- 标记的实时更新,无需加载页面谷歌地图API V3
- 阻止复选框道具“checked”更新
- jquery selector / checked attribute在IE7中没有更新
- innerHTML在改变输入值之后不被更新(checked=true/false/“checked”)