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

Stimulus JS:跨元素切换类报错,需实现多元素控制numpad显隐

解决方案

1. 修改Stimulus控制器代码

调整控制器逻辑,通过targets指定要切换显示的numpad元素,避免操作controller自身的类:

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  static classes = ["change"]
  static targets = ["numpad"]

  toggle() {
    this.numpadTarget.classList.toggle(this.changeClass)
  }
}

2. 更新HTML结构

  • 保留data-controller在amount_container上,确保事件绑定不会随numpad隐藏而失效
  • 给amount_box添加点击事件,触发toggle方法
  • 标记numpad为控制器的target元素
  • 将data-toggle-change-class放在controller所在元素上,符合Stimulus的规则
<div id="amount_container" data-controller="toggle" data-toggle-change-class="hidden">
  <div id="amount_box" data-action="click->toggle#toggle">
    <div>$999,999.99</div>
  </div>
  <div id="numpad" data-toggle-target="numpad">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    ...
    <div data-action="click->toggle#toggle">Next</div>
  </div>
</div>

3. 补充CSS隐藏类规则

需要在样式中定义hidden类的行为:

.hidden {
  display: none;
}

核心逻辑说明

  • 用Stimulus的targets精准定位numpad元素,确保只切换目标区域的显示状态
  • 事件绑定在amount_container层级下,即使numpad被隐藏,点击amount_box仍能触发切换
  • data-toggle-change-class与controller同元素,满足Stimulus的属性绑定要求,同时不会影响容器本身的显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:15:49