2016-01-01 51 views
1

獲得被點擊的actionButton的標籤的最佳方式是什麼?我有一個actionButton標籤已更新。當用戶點擊時,我需要捕獲它。我嘗試了輸入$ action2.label並輸入$ action2.text,但都沒有工作。在Shiny應用程序中捕獲actionButton的標籤

ui.R

library(shiny) 

shinyUI(fluidPage(

tags$head(tags$style(
    HTML(' 
     { background-color: #dec4de;} 
     #action4 { width: 275 px; color:red; background-color:yellow } 
     #action1, #action2, #action3 { color:black; background-color:lime } 
     body, label, input, button, select { font-family: "Arial"; }' 
) 
)),  

titlePanel("My Shiny App!"), 

sidebarLayout(
    sidebarPanel(
    tabsetPanel(type = "tabs", 
       tabPanel("About", "Developer Info here"), 
       tabPanel("How to Use", "User Docs")) 

), 

    mainPanel(
    img(src="capstone1.jpg", align = "center"), 
    br(),br(), 
    tags$textarea(id="stext", rows=3, cols=80, "Default value"), 
    br(),br(),br(), 
    actionButton("action1", "Action 1"), 
    actionButton("action2", "Action 2"), 
    actionButton("action3", "Action 3"), 
    br(), br(), 
    actionButton("action4", 
        label = "High < < < <PROBABILITY> > > > Low") 
) 
))) 

server.R

library(shiny) 

shinyServer(function(input, output, session) { 

    observeEvent(input$action1, { 
     x <- input$stext 
     print(input$action2.text) 
     updateTextInput(session, "stext", value=paste(x, "Btn 1")) 
    }) 

    observeEvent(input$action2, { 
     x <- input$stext 
     print(input$action2.label) 
     updateTextInput(session, "stext", value=paste(x, "Btn 2")) 
    }) 

    observeEvent(input$action3, { 
     x <- input$stext 
     print(x) 
     updateTextInput(session, "stext", value=paste(x, "Btn 3")) 
    }) 

}) 

更新:增加對shinyBS代碼

ui.R

{ 
    library(shinyBS) 
    .... 
    bsButton("myBtn", "") 
    ... 

} 

server.R

{ 
    .... 
    updateButton(session, "myBtn", "New Label") 
    .... 
} 
+1

當我創建該動作按鈕並將其存儲爲對象並進行探索時,我發現這個ab $ children [[1]] [[2]]會爲您提供標籤名稱。你可以嘗試如果輸入$動作1 $子[[1]] [[2]]給你你需要什麼? – Gopala

+0

查看此源代碼,圖標和標籤將作爲列表存儲在閃亮的標籤中。因此,標籤是作爲該列表的第二個元素獲得的。 https://github.com/rstudio/shiny/blob/master/R/input-action.R – Gopala

+0

@ user3949008,我得到了錯誤「警告:觀察者中的未處理錯誤:$運算符對原子向量無效 observeEvent(input $ action1)「 – PeterV

回答

2

爲了更新標籤(A),而不使用shinyBs,在ui.R可以使用textOutput(),然後閱讀和捕捉的點擊用戶(B),在server.R中,您可以使用observeEvent()updateTextInput(),但是從函數的初始結果開始。


(A)更新按鈕的標籤:在server.R

output$option1 <- renderPrint({ 
    if(input$userText %in% c("", " ")){cat("waiting")} ## to avoid bad readings. 

    else{cat(myFunction(input$userText)[1])}   ## here use the first element of 
                 ## the result of your function. 
}) 

output$option2 <- renderPrint({ 
    if(input$userText %in% c("", " ")){cat("for")} 
    else{cat(myFunction(input$userText)[2])} 
}) 

output$option3 <- renderPrint({ 
    if(input$userText %in% c("", " ")){cat("you")} 
    else{cat(myFunction(input$userText)[3])} 
}) 

(B)要讀取和捕捉點擊

p(
    actionButton("controller1", label=textOutput("option1")), 
    actionButton("controller2", label=textOutput("option2")), 
    actionButton("controller3", label=textOutput("option3")), 
    style="text-align: center;"), 

的用戶:

shinyServer(function(input, output, session) { 

    observeEvent(input$controller1, { 
     if(input$userText %in% c("", " ")){x <- "waiting"} ## to stay consistent 
                   ## in case the user clicks. 
     else{x <- myFunction(input$userText)[1]} 

    updateTextInput(session, "userText", value = paste(input$userText, x)) 
    }) 

    observeEvent(input$controller2, { 
     if(input$userText %in% c("", " ")){x <- "for"} 
     else{x <- myFunction(input$userText)[2]} 

    updateTextInput(session, "userText", value = paste(input$userText, x)) 
    }) 

    observeEvent(input$controller3, { 
     if(input$userText %in% c("", " ")){x <- "you"} 
     else{x <- myFunction(input$userText)[3]} 

    updateTextInput(session, "userText", value = paste(input$userText, x)) 
    }) 

}) 
+0

謝謝格溫埃爾。看完你的代碼後,我發現我可以創建一個數組對象,當我更新按鈕時,可以使用它來存儲標籤。所以我可以通過訪問該索引處數組中的元素來獲取標籤。 – PeterV

相關問題