从onclick / onchange事件获取HTMLcheckbox的价值

<input type="checkbox" onclick="onClickHandler()" onchange="onChangeHandler()" /> 

onClickHandler和/或onChangeHandler ,我怎样才能确定checkbox的新状态?

简短的回答:

使用click事件,直到值更新后才会触发,并在需要时触发:

 <label><input type='checkbox' onclick='handleClick(this);'>Checkbox</label> function handleClick(cb) { display("Clicked, new value = " + cb.checked); } 

现场示例 | 资源

更长的答案:

change事件处理程序不会被调用,直到checked状态已被更新( 现场示例 | 源代码 ),但是因为(如TimBüthe在注释中指出的)IE不会触发change事件,直到checkbox失去焦点,主动提供通知。 更糟糕的是,如果您点击checkbox(而不是checkbox本身)的标签来更新IE,则可以得到您获得旧值的印象(单击标签,在IE中尝试使用该标签: live example | 源 )。 这是因为如果checkbox具有焦点,则单击标签将使焦点远离焦点,用旧值触发change事件,然后发生click设置新值并将焦点设置回checkbox。 很混乱。

但是,如果使用click ,则可以避免所有这些不愉快。

我已经使用DOM0处理程序( onxyz属性),因为这是你问的,但是为了logging,我通常会build议在代码中挂接处理程序(DOM2的addEventListenerattachEvent在旧版本的IE),而不是使用onxyz属性。 这可以让你附加多个处理程序到同一个元素,并让你避免使所有的处理程序全局function。


此答案的较早版本使用此代码为handleClick

 function handleClick(cb) { setTimeout(function() { display("Clicked, new value = " + cb.checked); }, 0); } 

目标似乎是在查看价值之前允许点击完成。 据我所知,没有理由这样做,我不知道我为什么这样做。 该值在调用click处理程序之前被更改。 事实上,这个规范很清楚 。 没有setTimeout的版本在我试过的每个浏览器(甚至IE6)中都能很好地工作。 我只能假设我正在考虑一些其他的平台,直到事件发生之后才做出改变。 在任何情况下,没有理由这样做与HTMLcheckbox。

用这个

 <input type="checkbox" onclick="onClickHandler()" id="box" /> <script> function onClickHandler(){ var chk=document.getElementById("box").value; //use this value } </script>