0

页面上有一个按钮元素和以下点击流:

let submitClick$ = sources.DOM.select(buttonSel)
  .events("click")
  .mapTo(true)
  .debug(console.log)

一旦我单击按钮,true就会记录下来,这是正确的。

但是,当我映射流时,里面的代码会运行两次:

let submitDeal$ = submitClick$.map(() => {
  console.log("Clicked")
  // ...
})

不应将其他事件处理程序附加到按钮,并且元素本身位于 div 内:

button(".btn--add", "Submit")

通常event.preventDefault()event.stopPropagation()没有什么区别,并且检查事件确实表明它是从同一个 element 触发的button.btn--add

不太确定发生了什么,任何想法表示赞赏!谢谢!

版本:

"@cycle/dom": "^12.2.5"
"@cycle/http": "^11.0.1"
"@cycle/xstream-run": "^3.1.0"
"xstream": "^6.4.0"

更新 1:我检查了三次,没有 JS 文件被加载两次。我正在使用 Webpack 捆绑app.js页面上加载的单个文件(Elixir/Phoenix 应用程序)。此外,Event Listeners在 Chrome 的开发者工具中检查选项卡中的按钮时,似乎只附加了 1 个处理的事件。

更新 2: 代码要点

4

2 回答 2

0

原来这是由于 xstream 中的一个错误,该错误已在xstream@7.0.0.

于 2016-10-25T13:57:04.890 回答
0

提供的信息太少,无法解决这个问题。然而,一些事情浮现在脑海:

你不应该使用.debug(console.log),而是.debug(x => console.log(x))。其实.debug()就够了,内部会用到console.log。

那么,里面的按钮是<form>? 这可能会影响事件。一般来说,这个问题需要更多细节。

于 2016-10-16T16:34:26.670 回答