【问题标题】:onChange on checkbox doesn't fire in react复选框上的 onChange 不会在反应中触发
【发布时间】:2018-10-29 19:01:00
【问题描述】:

好的,在决定发布这个问题之前,我搜索了很多东西并尝试了很多东西,所以这就是我遇到的情况

<div className="btn-group" data-toggle="buttons">
 <label htmlFor="test" className="btn win-checkbox-btn" onClick={e => e.stopPropagation()}>
  <input id="test" autoComplete="off" className="taggable" type="checkbox" name="test" onChange={(e) => { console.log(e) }} />
 someText
 </label>
 <input autoComplete="off" className="taggable" type="checkbox" name="test2" onChange={(e) => { console.log(e) }} />
</div>

所以这里发生的情况是第一个复选框(标签内名称为 test 的那个)上的 onChange 函数根本不会触发,但第二个复选框(test2)上的 onChange 函数会正常触发。我需要在标签内使用它,因为我使用的是 Bootstrap checkbox buttons 。所以我使用引导程序 3.3.7 并做出反应 15.6.0 。 更多信息是,在标签上使用 htmlFor 属性或将其删除不会影响任何事情,而我在标签上使用的 onClick 处理程序位于我在搜索时找到的解决方案中,但也没有任何帮助删除或添加它不会影响任何内容。

这里的任何线索都会有很大帮助,在此先感谢。

【问题讨论】:

  • 可能是因为onClick={e =&gt; e.stopPropagation()}?如果你删除它怎么办?
  • 我在帖子中说过删除或添加它并没有太大影响,如果找到它只是一个解决方案并认为它可能会有所帮助

标签: javascript twitter-bootstrap reactjs checkbox twitter-bootstrap-3


【解决方案1】:

您的复选框不应位于标签标签内,因为标签标签会处理代码中的点击事件。您是否需要标签上的所有 onclick 事件“onClick={e => e.stopPropagation()}”?

您可以尝试以下代码: <label htmlFor="test" >someText </label> <input id="test" autoComplete="off" type="checkbox" name="test" onChange={(e) => { console.log(e) }} />

【讨论】:

  • 好的,将其从标签中移出并从父级中删除 data-toggle="buttons" attr 确实可以解决它,但随后将活动类添加到标签的引导复选框按钮停止工作,这不符合我的要求这里需要。 我现在正在大声思考我可以通过分配类来处理类更改,或者使用我保存并在更改时编辑的状态将其删除,但是我有大量这样的复选框,这意味着大量的状态,我觉得这不是这里的最佳解决方案。但是非常感谢,这至少会导致一些事情
猜你喜欢
  • 2014-12-24
  • 2018-04-10
  • 2016-12-04
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多