我有一个对象,其属性存储checkbox的checked
属性,如下所示:
var x = {
isChecked: document.querySelector("input").checked
};
function getX() {
(x.isChecked ? console.log("checkbox is checked") : console.log("checkbox is not checked"));
}
<input type="checkbox">
<button onclick="getX()">is the checkbox checked?</button>
选中和取消选中该复选框时,isChecked
属性的值不会更新。为什么会这样呢?
发布于 2021-10-26 17:43:26
因为.checked
是一个布尔值,而不是一个对象,所以当您说isChecked: document.querySelector("input").checked
时,您只是将isChecked
设置为element.checked
的当前值。使isChecked
成为一个函数,以便在每次需要时获取实际值。
var x = {
isChecked: () => document.querySelector("input").checked
};
function getX() {
(x.isChecked() ? console.log("checkbox is checked") : console.log("checkbox is not checked"));
}
<input type="checkbox">
<button onclick="getX()">is the checkbox checked?</button>
或者,如果您希望继续在isChecked
而不是isChecked()
中使用它,并且希望能够使用该变量手动设置它,则可以像这样使用getters和setters:
var x = {
get isChecked() {
return document.querySelector("input").checked;
},
set isChecked(checked) {
return document.querySelector("input").checked = checked;
}
};
function getX() {
(x.isChecked ? console.log("checkbox is checked") : console.log("checkbox is not checked"));
}
<input type="checkbox">
<button onclick="getX()">is the checkbox checked?</button>
<button onclick="x.isChecked = false">uncheck</button>
<button onclick="x.isChecked = true">check</button>
https://stackoverflow.com/questions/69731772
复制