显示不一致行为的复选框的Onclick事件处理程序
onclick event handler for checkbox exhibiting inconsistent behaviour
我已经将一个大型应用程序中难以跟踪的bug隔离为以下最小工作示例:
<html>
<head>
<title>Test page</title>
<script type="text/javascript" language="JavaScript">
function OnClickHandler (t) {
t.disabled = true;
var n = parseInt (t.getAttribute ("num"));
document.body.appendChild (document.createTextNode (
"num = " + t.getAttribute ("num") + ", checked = " + t.checked.toString () + " | "
));
t.setAttribute ("num", n + 1);
t.disabled = false;
}
</script>
</head>
<body>
<input type="checkbox" num="0" onclick="OnClickHandler(this)" />
<br />
</body>
</html>
我所期望的是num
属性的值和复选框的选中状态之间将有完美的同步。但这种情况并不成立,这可以通过快速点击复选框看到。下面是一个示例输出:
输入:快速点击两次,短暂停顿,快速点击两次,短暂停顿,点击
num = 0, checked = true | num = 1, checked = true | num = 2, checked= false | num = 3, checked = false | num = 4, checked = true |
逻辑的意图是num
属性仅在检查状态更改时更改。应用程序的许多后续逻辑都依赖于这种同步。建议采用什么方法来实现这种同步?
您是否尝试过在复选框中使用onchange而不是onclick?
好吧,我发现我的问题后几乎立即张贴。我的错误很简单,但我还是想把我的回答贴出来。
似乎正确的实现应该使用onchange
而不是onclick
作为复选框。因此,代码应该看起来像这样:
测试页面OnClickHandler (t) {T.disabled = true;var n = parseInt (t.getAttribute ("num"));document.body.appendChild(文档。createTextNode ("num = " + t.getAttribute ("num") + ", checked = " + t.checked.toString () + " | "));t.setAttribute ("num", n + 1);T.disabled = false;}
希望这能为一些可怜的人省下几根白头发。
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 多个类上的Javascript onclick事件处理程序
- 在这种情况下使用onclick事件处理程序可以接受吗
- 加载文档时的HTML onClick事件处理
- 使用 RequireJS 和 JQuery onclick 事件处理“this”
- 似乎未调用 Onclick 事件处理程序
- 为什么当同级节点的“display”属性发生更改时,React 组件的 onClick 事件处理程序不会触发
- 链接到boostrap的Javascript代码会阻止onclick事件处理程序运行
- onClick 事件处理程序不会触发
- 如何将简单的 onClick 事件处理程序添加到画布元素
- anchor标记(一个标记)onclick事件处理程序不工作
- 用符合内容安全策略的代码替换多个内联按钮onclick事件处理程序
- 我必须点击两次,为什么?(JavaScript onclick事件处理程序)
- 为什么游标、不透明属性和onclick事件处理程序在IE9上不起作用
- onClick事件处理程序在加载时调用,而不是在单击时调用
- 如何使用javascript onclick事件处理程序同一类锚元素
- 为视频添加onclick事件处理程序是行不通的
- 当onclick事件处理机制启动时,为什么不调用第二个函数?
- 如何使用JQuery将onclick事件处理程序添加到锚标记
- sedragon自定义控件,带有onClick事件处理程序:IE中的问题