【发布时间】:2018-12-03 17:31:15
【问题描述】:
我想手动控制是否选中了给定的复选框。出于这个原因,我提供了一个自定义的onclick 函数和return false :我的想法是如果我不return false,那么默认操作(恢复input 的checked 标志)将覆盖什么我正在设置我的自定义函数。
let input = document.getElementsByTagName('input')[0]
input.onclick = function() {
if(input.checked)
input.checked = false
else
input.checked = true
return false
}
<input type="checkbox"/>
但是,这不起作用。 return false 还原我所做的!它将复选框重置为单击之前的状态!
删除return false 也不好:然后复选框在单击它之前强制自己进入不的状态,再次覆盖我在自定义onclick 函数中所做的任何事情:
let input = document.getElementsByTagName('input')[0]
input.onclick = function() {
if(input.checked)
input.checked = true // click should be futile
else
input.checked = false //click should be futile
}
<input type="checkbox"/>
如何手动控制复选框是否被点击?如何使复选框不覆盖我在自定义 onclick 处理程序中设置的任何内容?
【问题讨论】:
-
我不确定发生了什么,但这似乎有效:jsfiddle.net/khrismuc/9mtby6es
-
我不确定你到底想做什么,但要小心使用带有复选框的“onclick”。有多种方法可以更改不涉及单击它们的复选框,例如 Tab 键和按空格键,或使用辅助功能软件。观看
change事件比观看click事件要好得多。change是您真正关心的(有人试图更改复选框的状态),而您并不真正关心他们是如何做到的(单击或其他方式)。 -
另外,您的目标似乎是防止复选框更改。如果是这样,那么您应该禁用该复选框(使用
disabled属性),而不是提供令人困惑的用户体验,允许某人尝试更改它,只是为了恢复该框。 -
@Nate 感谢您对
change事件的评论。至于我想要做什么:为在线游戏实现一个团队建设者。用户必须从所有可用的怪物中选择 8 个怪物。对于每个怪物,用户必须选择一些动作。因此,如果用户尝试检查可用怪物附近的复选框但尚未自定义其动作,我想显示一个模式,允许用户为该怪物选择动作并延迟检查复选框,直到动作被填写。或者如果移动已经自定义,请立即选中该框并将团队保存到 cookie(仍然执行处理程序) -
@Nate 这就是为什么我不想完全禁用该框的原因。我想允许用户选中复选框。我只是想在他们尝试这样做时提示他们提供更多数据。
标签: javascript checkbox onclick