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

需用jQuery实现输入文本框切换,当前方法在新版jQuery中已弃用

嘿,刚接触jQuery就遇到版本适配问题很正常,我来帮你把这个地址切换功能改成适配新版jQuery的写法!

首先,咱们先理清楚核心需求:根据选择的国家是美国还是其他,切换两组地址输入框的启用/禁用状态。旧代码里的.change(fn)在新版jQuery里只是被标记为过时,并不是完全不能用,但官方推荐更灵活的写法,另外控制输入框禁用状态的方式也有更规范的方案,咱们一步步来:

第一步:给地址框分组加类名

先给HTML里的美国地址框和非美国地址框分别加上统一的类名,这样用jQuery选择起来更方便,示例如下:

<!-- 国家选择框 -->
<select id="country-select">
  <option value="US">United States</option>
  <option value="CA">Canada</option>
  <option value="GB">United Kingdom</option>
  <!-- 其他国家选项 -->
</select>

<!-- 美国地址输入组 -->
<div class="address-group us-address-fields">
  <input type="text" placeholder="州">
  <input type="text" placeholder="邮政编码">
</div>

<!-- 非美国地址输入组 -->
<div class="address-group international-address-fields">
  <input type="text" placeholder="省份/地区">
  <input type="text" placeholder="邮政编码/邮编">
</div>

第二步:编写新版jQuery代码

新版jQuery里,我们用.on('change', ...)来绑定事件,用.prop('disabled', 状态)来控制输入框的禁用/启用,完整代码如下:

// 等待DOM加载完成再执行代码(简写写法)
$(function() {
  // 缓存DOM元素的jQuery对象,避免重复查找提升性能
  const $countrySelect = $('#country-select');
  const $usFields = $('.us-address-fields input');
  const $intlFields = $('.international-address-fields input');

  // 定义状态更新函数:根据选中的国家切换输入框状态
  function updateAddressFields() {
    const isUSSelected = $countrySelect.val() === 'US';
    // 美国地址框:选中美国则启用,否则禁用
    $usFields.prop('disabled', !isUSSelected);
    // 非美国地址框:选中美国则禁用,否则启用
    $intlFields.prop('disabled', isUSSelected);
  }

  // 页面加载时先执行一次,初始化状态
  updateAddressFields();

  // 绑定国家选择框的change事件(新版推荐写法)
  $countrySelect.on('change', updateAddressFields);
});

关键变化点说明

  1. 事件绑定的升级:旧的.change(fn)其实是.on('change', fn)的简写,新版jQuery推荐用.on()的写法,因为它更灵活——不仅能绑定单个事件,还能绑定多个事件、实现事件委托,扩展性更强。
  2. 禁用状态的规范写法:旧代码可能用.attr('disabled', 'disabled')或者.removeAttr('disabled'),但新版jQuery里,对于disabled这种布尔类型的元素状态属性(property),官方推荐用.prop('disabled', true/false),这样更准确,因为disabled是元素本身的状态,不是HTML标签上的属性。
  3. DOM元素缓存:把常用的jQuery对象存在变量里,避免每次事件触发都重新查找DOM,这是写jQuery代码的基础好习惯,能提升页面性能。

小提示

  • 如果后续需要给整个地址组(比如包裹输入框的div)做显示/隐藏,也可以搭配.show()/.hide()或者.toggle()使用,但你的需求是禁用/启用,所以用.prop('disabled')就完全够用。
  • 确保你引入的是新版jQuery(比如3.x以上版本),可以直接用官方CDN链接。

这样改完之后,代码不仅适配新版jQuery,还更清晰易维护,适合刚接触jQuery的你理解~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:25:07