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

HTML+JavaScript实现按钮单独控制对应行输入框的激活与禁用

问题原因

你当前代码的核心问题是直接使用$("input")全局选择器匹配页面所有输入框,没有限定操作范围为当前按钮对应的分组输入框,因此触发任意按钮都会修改全部输入框的启用状态。

调整方案

方案一(推荐,代码更易维护)

步骤1:优化HTML结构

给每个分组统一套上相同类名的父容器,同时给所有按钮组加上统一的类名,避免重复绑定事件:

<!-- 第一组 -->
<div class="control-group">
  <div class="btn-group toggle-btn" data-toggle="buttons">
    <label class="btn btn-default"> Activar1   
    </label>
  </div> 
  <input type="text" disabled="disabled" class="prueba"/>
  <input type="text" disabled="disabled" class="prueba"/>
</div>

<!-- 第二组 -->
<div class="control-group">
  <div class="btn-group toggle-btn" data-toggle="buttons">
    <label class="btn btn-default"> Activar2   
    </label>
  </div> 
  <input type="text" disabled="disabled" class="prueba"/>
  <input type="text" disabled="disabled" class="prueba"/>
</div>

<!-- 第三组 -->
<div class="control-group">
  <div class="btn-group toggle-btn" data-toggle="buttons">
    <label class="btn btn-default"> Activar3   
    </label>
  </div> 
  <input type="text" disabled="disabled" class="prueba"/>
  <input type="text" disabled="disabled" class="prueba"/>
</div>

步骤2:简化JavaScript逻辑

仅绑定一次事件,通过DOM遍历找到当前按钮所在分组下的输入框进行操作:

$('body').on('click', '.toggle-btn', function(event) {
  // 切换当前按钮激活状态
  if ($(this).attr('data-toggle') != 'button') {
    $(this).toggleClass('active');
  }
  // 查找当前按钮所属分组下的对应输入框
  const $targetInputs = $(this).closest('.control-group').find('input.prueba');
  // 根据激活状态修改输入框禁用属性
  $targetInputs.prop('disabled', !$(this).hasClass('active'));
});

方案二(不修改原有HTML结构)

如果不想改动现有HTML代码,只需把原有JS里的全局输入框选择器,替换为当前按钮对应的分组输入框选择即可:

// 以Activar1的逻辑为例,另外两个按钮同理修改选择范围
$( 'body' ).on( 'click', '#1', function(event) {    
  if( $(this).attr('data-toggle') != 'button' ) { 
    $(this).toggleClass('active');      
  }
  // 只选择当前按钮后面的两个兄弟输入框
  const $targetInputs = $(this).nextAll('input.prueba').slice(0,2);
  $targetInputs.prop('disabled', !$(this).hasClass('active'));
});

// Activar2逻辑调整
$( 'body' ).on( 'click', '#2', function(event) {    
  if( $(this).attr('data-toggle') != 'button' ) { 
    $(this).toggleClass('active');      
  }
  // 选择当前按钮父容器下的两个输入框
  const $targetInputs = $(this).parent().find('input.prueba');
  $targetInputs.prop('disabled', !$(this).hasClass('active'));
});

// Activar3逻辑和Activar2完全一致,直接复用即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:39:04