Javascript R-上次单击的按钮id
我有多个动作按钮,我想在上面显示不同的选择输入,我想知道上次点击的按钮id,我该怎么做?当我使用Javascript R-上次单击的按钮id,javascript,r,shiny,observer-pattern,action-button,Javascript,R,Shiny,Observer Pattern,Action Button,我有多个动作按钮,我想在上面显示不同的选择输入,我想知道上次点击的按钮id,我该怎么做?当我使用 which(lapply(c(1:10), function(i) { input[[paste0("ActionButton", i)]]}) == TRUE) 它向我显示了所有被点击的按钮,但是我想知道哪一个是最后一个,以便再次启用对以前按钮的点击。我该怎么做?我是shiny的新手,不确定是否理解所有反应/隔离问题,因此我非常乐意提供任何提示。此代码跟踪上次单击的按钮: library(
which(lapply(c(1:10), function(i) { input[[paste0("ActionButton", i)]]}) == TRUE)
它向我显示了所有被点击的按钮,但是我想知道哪一个是最后一个,以便再次启用对以前按钮的点击。我该怎么做?我是shiny的新手,不确定是否理解所有反应/隔离问题,因此我非常乐意提供任何提示。此代码跟踪上次单击的按钮:
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)
库(闪亮)
用户界面(0){
rv$lastbn=“第三个”
}
})
输出$lastButtonCliked您可以通过添加JS来完成
差不多
示例(如果您不想控制所有btn,请将classneeded
添加到btn)
ui还有第三种解决方案,利用每个按钮保持按下的时间。如果您可以监控该时间数,则该时间数的任何更改都将指示按下了哪个按钮
下面是一个简短的实现。该页面有三个按钮(具有任意名称):
page如果我有100个ActionButton,如何编写这么多observeEvents?假设您的按钮以“button”+X开头,其中X是从1到100。非常感谢。您能否解释一下,如何在selectInput按钮中保存当前选定的值?假设我选择了输入和操作按钮“保存”。对于每次“保存”单击,我想将selectInput中当前选定的值保存为updateSelectInput,您可以添加它吗?如果你愿意,我可以添加新问题。不完全是,我的意思是,如果选择输入我有选择=c(1:5),选择=1,如果我在应用程序中将选择值更改为4,然后单击“保存”,选择输入按钮将其选择值更新为4(所以在“保存”按钮之前最后选择的值),我真的无法理解你想要什么。。。如果你想问一个新问题,请参考这个问题,我希望你能更容易理解。
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)
$(document).on('click', '.needed', function () {
Shiny.onInputChange('last_btn',this.id);
});
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)
page <- shinyUI(basicPage(
actionButton("firstbtn",label="Btn1"),
actionButton("secondbtn",label="Btn2"),
actionButton("thirdbtn",label="Btn3"),
textOutput("result")
))
shinyServer <- function(input, output, session) {
# the number of clicks on each button is zero at first
oldBtnClicks <- rep(0,3)
observeEvent({ obs <<- list(input$firstbtn, input$secondbtn, input$thirdbtn) }, ({
# store all button state in a list
BtnState <- obs
# extract in a vector the number of clicks from each
newBtnClicks <- rep(0,3)
for (i in 1:3)
newBtnClicks[i] <- if (is.null(BtnState[[i]])) 0 else BtnState[[i]][1]
# look for the change in the number of clicks
buttonClicked <- match(1, newBtnClicks - oldBtnClicks)
# show the button number that was clicked
output$result <- renderText(expr = buttonClicked)
# update hte number of clicks in the shinyServer environment
oldBtnClicks <<- newBtnClicks
}))
}
shinyApp(ui = page, server = shinyServer)