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

如何在change事件中将输入框值同步到侧边栏的jQuery对象?

问题需求

在嵌套设计表单中,需要实现:当.field--name-field-design-name下的非直接子元素输入框内容变化时,将输入值动态填充到侧边栏对应的<p class="sidebar-design-name"></p>元素中,实现逻辑需与现有代码行$('.sidebar-design-number', $element).text('Design ' + (i+1))逻辑一致。

原有代码

const $singleDesignWrapper = $(
  ".field--name-field-design .field--name-field-design-name"
);

$singleDesignWrapper.each(function(i) {

  console.log($(this));

  // Object where I need to put the value  
  const $element =
    $('&lt;div class="sidebar-designs-wrapper"&gt;
' +
    '  &lt;div class="sidebar-single-design-container"&gt;
' +
    '    &lt;div class="sidebar-design-number-and-name"&gt;
' +
    '      &lt;p class="sidebar-design-number"&gt;&lt;/p&gt;
' +
    '      &lt;p class="sidebar-design-name"&gt;&lt;/p&gt;
' +
    '    &lt;/div&gt;
' +
    '    &lt;p class="sidebar-garments-locations-count"&gt;&lt;/p&gt;
' +
    '  &lt;/div&gt;
' +
    '&lt;/div&gt;');

  $('.sidebar-design-number', $element).text('Design ' + (i+1));
  $sidebarDesignsWrapper.append($element);

});

对应HTML结构

<div class="sidebar">
  <!-- some html here -->
  <div class="button-container current-step"></div>
  <div class="sidebar-designs-wrapper">
    <div class="sidebar-single-design-container">
      <div class="sidebar-design-number-and-name">
        <p class="sidebar-design-number"></p>
        <p class="sidebar-design-name"></p>
      </div>
      <p class="sidebar-garments-locations-count"></p>
    </div>
</div>

<div class="main">
  <div class="field--name-field-design">
    <div class="field--name-field-design-name">
      <div class="js-form">
        <input type="text" value="hello">
      </div>
    </div>
  </div>
  <div class="field--name-field-design"></div>
</div>
解决方案

核心是在遍历设计项时,绑定输入框的变化事件,将值同步到对应侧边栏元素。修改后的完整代码如下:

const $singleDesignWrapper = $(
  ".field--name-field-design .field--name-field-design-name"
);
// 确保选择器正确指向侧边栏的容器
const $sidebarDesignsWrapper = $('.sidebar .sidebar-designs-wrapper');

$singleDesignWrapper.each(function(i) {
  // 获取当前设计项内的输入框(非直接子元素)
  const $input = $(this).find('input');
  // 重构侧边栏元素的创建语法,避免转义问题
  const $element = $(`
    <div class="sidebar-single-design-container">
      <div class="sidebar-design-number-and-name">
        <p class="sidebar-design-number"></p>
        <p class="sidebar-design-name"></p>
      </div>
      <p class="sidebar-garments-locations-count"></p>
    </div>
  `);

  // 设置设计编号,与原有逻辑一致
  $('.sidebar-design-number', $element).text('Design ' + (i+1));
  // 初始化填充输入框当前值
  $('.sidebar-design-name', $element).text($input.val());

  // 绑定输入框的实时变化事件,同步值到侧边栏
  $input.on('input change', function() {
    $('.sidebar-design-name', $element).text($(this).val());
  });

  $sidebarDesignsWrapper.append($element);
});

关键细节说明

  • 使用$(this).find('input')精准定位当前设计项内的输入框,适配非直接子元素的结构
  • 同时绑定input和change事件:input实现实时输入同步,change覆盖输入框失焦时的场景
  • 初始化时填充输入框的现有值,避免侧边栏初始为空
  • 利用闭包特性,每个输入框的事件回调都能对应到自己的侧边栏元素,不会出现混淆

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:04:54