2016-05-18 9 views
2

ich eine einfache R-glänzende Anwendung mit benutzerdefinierten HTML entwickelt haben, und ich habe eine Reihe von Eingaben (in einer Tabelle) wie folgt aus:Make observeEvent für eine Reihe von ähnlichen Elementen zu hören anstelle von nur 1

<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> 

Ich muss auf die Änderungen achten, wenn der Benutzer auf einen von ihnen klickt und einige Werte auf einer Matrix aktualisiert. Ich habe die Dokumentation von Shiny gelesen und es steht für "EventExpr": "Ein (quotierter oder nicht quoted) Ausdruck, der das Ereignis darstellt; dies kann ein einfacher reaktiver Wert sein wie Input $ click, ein Aufruf eines reaktiven Ausdrucks wie dataset(), oder sogar ein komplexer Ausdruck in geschweiften Klammern "aber ich finde nicht, wie man einen solchen Ausdruck baut.

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

...

Gibt es eine Möglichkeit sich, dies zu tun:

Ich habe eine observeEvent für jeden von ihnen gerne schaffen hatte?

Antwort

1

Sie auf dem übergeordneten Knoten (in diesem Fall, dass ich denke, es die Tabelle, die Sie diese Zeilen in setzen würde) AddEventListener können und prüfen zum Beispiel:

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

Es ist eigentlich eine gute Praxis zu vermeiden anhängen Los Event Listeners auf ähnlichen Knoten und setzen Sie nur 1 Listener auf dem Elternknoten, also +1 für Intuition.

+0

Danke für die Antwort und für die +1, aber meine Frage bezieht sich auf R (Shiny speziell). Trotzdem stimme ich dir zu. – Leo