使observeEvent监听一组相似的元素而不是1

时间:2016-05-18 09:21:40

标签: javascript html r shiny backend

我开发了一个带有自定义HTML的简单R-Shiny应用程序,我有一组输入(在表格中),如下所示:

<tr><td>i1</td><td><input type="checkbox" id="i1" name="i1"></td></tr>
<tr><td>i2</td><td><input type="checkbox" id="i2" name="i2"></td></tr>
<tr><td>i3</td><td><input type="checkbox" id="i3" name="i3"></td></tr>
<tr><td>i4</td><td><input type="checkbox" id="i4" name="i4"></td></tr>

当用户点击其中任何一个并更新矩阵上的某些值时,我需要监听这些更改。我已经阅读了Shiny的文档,它说eventExpr是“ A(引用或未引用)表达式,表示事件;这可以是一个简单的反应值,如input $ click,调用反应式表达式,如dataset() ,甚至是大括号内的复杂表达式“但我找不到如何构建这样的表达式。

我必须为每个人创建observeEvent,例如:

observeEvent(input$i1, { ... })
observeEvent(input$i2, { ... })

...

有没有可能做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以在父节点上添加事件监视器(在这种情况下,我猜这将是您将这些行放入的表)并检查例如:

if(event.target.tagName === 'INPUT' && (/i[0-9]/).test(event.target.id)){
    // do your stuff
}

实际上,避免在类似节点上附加大量事件侦听器并在父节点上只设置1个侦听器是一个好习惯,所以+1表示直觉。