Javascript 如何为多个元素设置obervable和subscriber?

Javascript 如何为多个元素设置obervable和subscriber?,javascript,html,dom,ecmascript-6,rxjs,Javascript,Html,Dom,Ecmascript 6,Rxjs,我有一个表格和许多单元格,里面有输入 我希望触发一个事件,并在输入框中进行任何更改时获取keyup、keydown和enter上的值 我尝试过的东西包括我的js中的以下内容 var sources = document.querySelectorAll('td'); var source = Rx.Observable.fromEvent(sources, 'click'); Rx.Observable.fromEvent(sources,'click') .map(v => {ret

我有一个表格和许多单元格,里面有输入

我希望触发一个事件,并在输入框中进行任何更改时获取keyup、keydown和enter上的值

我尝试过的东西包括我的js中的以下内容

var sources = document.querySelectorAll('td');

var source = Rx.Observable.fromEvent(sources, 'click');
Rx.Observable.fromEvent(sources,'click')
.map(v => {return v})
.subscribe(
    v => { console.log(v) },
    e => { console.log(e) },
    () => { console.log('complete') }
);

我是RxJs的第一次用户,不明白为什么只有第一个单元格可以触发事件,而表中的其他单元格不能。如何在所有单元格上实现事件

试试这样的方法:

    // get the sources into an array
    const sources = document.querySelectorAll('td')
    const sourcesArray = []
    sources.forEach(source => sourcesArray.push(source))

    // any even from the merged observables will emit a value...
    merge(
      // for each source, create an observable via fromEvent
      ...sourcesArray.map(source => fromEvent(source, 'click'))
    ).pipe(
      // ...value emitted can be from any of the merged observables (i.e. the fromEvent())
      // note: pipe() and tap() is optional...
      tap(val => console.log(`pipe an chain whatever you need here`))
    ).subscribe(val => console.log(`use next if u just need the next value... ${val}`))


仅供参考,我没有运行代码,但概念应该是正确的。希望这会有所帮助。

这不是一个明确的回答,但合并功能可以帮助您合并多个观测值。同时使用这两个可以吗unpkg.com/@reactivex/rxjs@5.3.0/dist/global/Rx.js“>unpkg.com/rxjs@6.5.4/bundles/rxjs.umd.min.js“>