You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站开发:页面加载时未勾选Checkbox对应输入框无readonly属性,切换后正常?

问题分析与解决

问题描述

开发网站时需要实现:当指定Checkbox未勾选时,对应输入框添加readonly属性;勾选Checkbox时,移除输入框的readonly属性。目前遇到的问题是:页面加载完成后,Checkbox处于未勾选状态,但输入框并未自动设置readonly属性;只有勾选再取消勾选Checkbox后,输入框才能正常获得readonly属性。

现有代码

const checkbox = document.getElementById("check_pt");
const inputElement = document.getElementById("pi_pt");

checkbox.addEventListener("change", function() {
  if (!(checkbox.checked)) {
    inputElement.setAttribute("readonly", "true");
  } else {
    inputElement.removeAttribute("readonly"); 
  }
});

原因分析

你的代码仅在Checkbox的change事件触发时才执行状态切换逻辑,但页面加载完成后,并没有主动触发一次这个逻辑来初始化输入框的状态。页面加载时Checkbox默认是未勾选的,但此时change事件并未触发,所以输入框的readonly属性不会被设置;只有当你手动操作Checkbox(勾选再取消)触发了change事件后,逻辑才会执行,输入框才会被加上readonly属性。

解决方案

只需要在页面加载完成后,主动执行一次状态判断逻辑即可。推荐把状态切换逻辑抽成复用函数,既绑定到change事件,又在初始化时调用:

const checkbox = document.getElementById("check_pt");
const inputElement = document.getElementById("pi_pt");

// 封装状态切换逻辑为复用函数
function toggleInputReadonly() {
  if (!checkbox.checked) {
    inputElement.setAttribute("readonly", "true");
  } else {
    inputElement.removeAttribute("readonly"); 
  }
}

// 绑定change事件
checkbox.addEventListener("change", toggleInputReadonly);

// 页面加载时初始化输入框状态
toggleInputReadonly();

或者也可以不封装函数,直接在绑定事件后单独执行一次初始化判断:

const checkbox = document.getElementById("check_pt");
const inputElement = document.getElementById("pi_pt");

checkbox.addEventListener("change", function() {
  if (!(checkbox.checked)) {
    inputElement.setAttribute("readonly", "true");
  } else {
    inputElement.removeAttribute("readonly"); 
  }
});

// 初始化执行一次状态设置
if (!checkbox.checked) {
  inputElement.setAttribute("readonly", "true");
}

内容的提问来源于stack exchange,提问作者user20733481

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:55:18