javascript - 为什么 JavaScript 属性不会自动更新?
问题描述
我有一个具有存储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
属性的值不会更新。为什么会这样?
解决方案
因为.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()
希望能够使用该变量手动设置它,您可以像这样使用 getter 和 setter:
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>
推荐阅读
- python - AWS Lambda 没有返回值
- java - 如何停止 JButton 背景仅显示为边框
- javascript - 根据li JQuery中输入元素的值删除元素li
- c# - 使用 Excel 打开时生成的 csv 文件,不显示列中的值
- php - Gearman 的 Worker 出现分段错误
- mongoose-populate - 如何仅填充 getter 的内容
- python - 如何将我的 VPN 与 python 请求连接?
- django - RedirectView 给 NoReverseMatch
- c# - 是否有 SSRS 表达式用于计算不包括周末、周六和周日的两天之间的差异?
- scala - 为什么编译器无法识别属性?