<input type="checkbox" onclick="onClickHandler()" onchange="onChangeHandler()" />
在 onClickHandler
和/或 onChangeHandler
中,如何确定复选框的新状态?
<input type="checkbox" onclick="onClickHandler()" onchange="onChangeHandler()" />
在 onClickHandler
和/或 onChangeHandler
中,如何确定复选框的新状态?
简单回答:
使用click
事件,它会在值被更新后才触发,并且会在您希望它触发时触发:
<label><input type='checkbox' onclick='handleClick(this);'>Checkbox</label>
function handleClick(cb) {
display("Clicked, new value = " + cb.checked);
}
更详细的解释:
change
事件处理程序在 checked
状态已更新后才会被调用 (实时示例 | 源代码),但是由于(正如 Tim Büthe 在评论中指出的那样)IE 不会在复选框失去焦点之前触发 change
事件,所以您无法及时得到通知。更糟糕的是,如果您在 IE 中单击复选框的 标签(而不是复选框本身)以更新它,您可能会得到旧值的印象(请在此处使用 IE 尝试单击标签:实时示例 | 源代码)。这是因为如果复选框具有焦点,则单击标签会将焦点从复选框中移开,触发带有旧值的 change
事件,然后 click
发生并设置新值,并将焦点重新设置在复选框上。非常令人困惑。
但是,如果您使用 click
,则可以避免所有这些不愉快的事情。
我使用DOM0处理程序(onxyz
属性),因为这是您所要求的,但是为了记录,我通常建议在代码中连接处理程序(DOM2的addEventListener
或旧版IE中的attachEvent
),而不是使用onxyz
属性。这使您可以将多个处理程序附加到同一元素,并避免使所有处理程序成为全局函数。
此答案的早期版本使用以下代码来处理 handleClick
:
function handleClick(cb) {
setTimeout(function() {
display("Clicked, new value = " + cb.checked);
}, 0);
}
目标似乎是在点击完成之前查看值。据我所知,没有理由这样做,我也不知道为什么要这样做。值在调用click
处理程序之前已更改。事实上,规范非常清楚。没有setTimeout
的版本在我尝试过的每个浏览器中都可以正常工作(甚至是IE6)。我只能假设我当时在考虑一些其他平台,在该平台上更改直到事件之后才完成。无论如何,在HTML复选框中没有理由这样做。
对于React.js,您可以使用更易读的代码来实现这一点。希望它有所帮助。
handleCheckboxChange(e) {
console.log('value of checkbox : ', e.target.checked);
}
render() {
return <input type="checkbox" onChange={this.handleCheckboxChange.bind(this)} />
}
使用此功能
<input type="checkbox" onclick="onClickHandler()" id="box" />
<script>
function onClickHandler(){
var chk=document.getElementById("box").value;
//use this value
}
</script>
use onclick event on all checkboxes that you want to get their values whether they are checked or not.
<input type="checkbox" value="rightSideCheckbox" onclick='handleClick(this);'>
function handleClick(checkbox) {
if(checkbox.checked){
console.log(checkbox.value+"True")
}
else{
console.log(checkbox.value+"False")
}
}
const [checkboxval, setCheckboxVal] = React.useState(null);
const handleChangeCheckbox = (e) => {
setCheckboxVal(e.target.checked);
}
render() {
return <input type="checkbox" onChange={(e) => handleChangeCheckbox(e)}
}
onchange
在IE9+
中能够正确地工作。来源 - MoriTab
+空格
),似乎切换复选框也会触发onclick
处理程序(至少在 Chrome 51 中已验证)。 - Nate Whittaker