本文详解如何使用 javascript 实现复选框(checkbox)与输入框(input)的联动:初始加载时即按复选框默认状态正确设置输入框的 `readonly` 属性,并在用户交互时实时响应状态变更。
你遇到的问题很典型:JavaScript 事件监听器(如 change)仅在用户触发交互时执行,而页面首次加载时并不会自动运行——因此即使复选框默认为未勾选(checked = false),input 元素也不会被初始化为 readonly 状态。
要解决这个问题,需确保 初始化逻辑与事件逻辑保持一致。推荐采用以下两种方式之一(或组合使用):
将状态同步逻辑封装为独立函数,既用于事件响应,也用于页面加载时立即执行:
function syncReadOnlyState() {
const checkbox = document.getElementById("check_pt");
const inputElement = document.getElementById("pi_pt");
if (!checkbox.checked) {
inputElement.setAttribute("readonly", "readonly"); // 推荐值为 "readonly",非 "true"
} else {
inputElement.removeAttribute("readonly");
}
}
// 页面加载完成后立即同步状态
document.addEventListener("DOMContentLoaded", syncReadOnlyState);
// 同时监听后续变更
const checkbox = document.getElementById("check_pt");
checkbox.addEventListener("change", syncReadOnlyState);? 注意:readonly 是布尔属性,其存在即生效,标准写法应设为 "readonly"(HTML 规范建议),而非 "true";浏览器虽兼容 "true",但语义不准确。
若复选框的初始状态固定(如始终默认未勾选),可直接在 HTML 中声明 readonly,再由 JS 动态移除:
const checkbox = document.getElementById("check_pt");
const inputElement = document.getElementById("pi_pt");
checkbox.addEventListener("change", function() {
if (this.checked) {
inputElement.removeAttribute("readonly");
} else {
inputElement.setAttribute("readonly", "readonly");
}
});该方式无需额外初始化调用,语义清晰、容错性高。
通过以上任一方案,即可确保页面加载瞬间与用户交互时,复选框与输入框的只读状态始终保持严格一致。