use*_*225 3 javascript r observer-pattern shiny action-button
我有多个操作按钮,我想在这些按钮上显示不同的选择输入,并且我想知道上次单击的按钮 ID,我该怎么做?当我使用
which(lapply(c(1:10), function(i) { input[[paste0("ActionButton", i)]]}) == TRUE)
Run Code Online (Sandbox Code Playgroud)
它向我显示了所有被点击的按钮,但是我想知道哪个是最后一个,以便再次点击以前的按钮。我怎样才能做到这一点?我是闪亮的新手,不确定是否了解所有反应/隔离问题,所以我会很乐意提供任何提示。
你可以通过添加JS来实现
有点像
$(document).on('click', '.needed', function () {
Shiny.onInputChange('last_btn',this.id);
});
Run Code Online (Sandbox Code Playgroud)
示例(needed如果您不想控制所有 btn,请将类添加到 btn)
ui <- shinyUI(fluidPage(
titlePanel("Track last clicked Action button"),
tags$head(tags$script(HTML("$(document).on('click', '.needed', function () {
Shiny.onInputChange('last_btn',this.id);
});"))),
sidebarLayout(
sidebarPanel(
actionButton("first", "First",class="needed"),
actionButton("second", "Second",class="needed"),
actionButton("third", "Third",class="needed"),
actionButton("save", "save"),
selectInput("which_","which_",c("first","second","third"))
),
mainPanel(
textOutput("lastButtonCliked")
)
)
))
server <- shinyServer(function(input, output,session) {
observeEvent(input$save,{
updateSelectInput(session,"which_",selected = input$last_btn)
})
output$lastButtonCliked=renderText({input$last_btn})
})
# Run the application
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
此代码跟踪最后单击的是哪个按钮:
library(shiny)
ui <- shinyUI(fluidPage(
titlePanel("Track last clicked Action button"),
sidebarLayout(
sidebarPanel(
actionButton("first", "First"),
actionButton("second", "Second"),
actionButton("third", "Third")
),
# Show a plot of the generated distribution
mainPanel(
textOutput("lastButtonCliked")
)
)
))
server <- shinyServer(function(input, output) {
rv <- reactiveValues(lastBtn = character())
observeEvent(input$first, {
if (input$first > 0 ) {
rv$lastBtn = "first"
}
})
observeEvent(input$second, {
if (input$second > 0 ) {
rv$lastBtn = "second"
}
})
observeEvent(input$third, {
if (input$third > 0 ) {
rv$lastBtn = "third"
}
})
output$lastButtonCliked <- renderText({
paste("Last button clicked: ", rv$lastBtn)
})
})
# Run the application
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
带 lapply 的版本有很多按钮。感谢@Victorp 和这个答案。
这是代码:
library("shiny")
ui <- fluidPage(
fluidRow(
column(
width = 6,
lapply(
X = 1:5,
FUN = function(i) {
actionButton(inputId = paste0("button", i), label = paste("Button ", i))
}
)
),
column(
width = 6,
textOutput("lastButtonCliked")
)
)
)
server <- function(input, output){
rv <- reactiveValues(lastBtn = character())
lapply(
X = 1:6,
FUN = function(i){
observeEvent(input[[paste0("button", i)]], {
if (input[[paste0("button", i)]] > 0) {
rv$lastBtn = paste0("button", i)
}
})
}
)
output$lastButtonCliked <- renderText({
paste("Last button clicked: ", rv$lastBtn)
})
}
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |