页面上有一个按钮元素,下面是点击流:
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()
没有区别,检查事件确实显示它是从同一元素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应用程序)。此外,在检查Chrome开发人员工具的Event Listeners
标签中的按钮时,似乎只附加了1个事件。
更新2: Gist with the code
答案 0 :(得分:0)
提供的信息太少,无法解决此问题。但有些事情会浮现在脑海中:
您不应该使用.debug(console.log)
而是使用.debug(x => console.log(x))
。实际上.debug()
就足够了,它将在内部使用console.log。
然后,<form>
内的按钮是?这可能会影响事件。一般来说,这个问题需要更多细节。
答案 1 :(得分:0)
原来这是由于xstream中的一个错误,已在xstream@7.0.0
中修复。