闪亮的小部件复选框组在输入时激活
Shiny widgets check box groups activating on enter
我正在尝试设计一个搜索功能,您可以在其中通过文本输入和复选框进行搜索(我使用的是 shinyWidgets),除了某些原因,当您在文本输入中按下回车键时,它会激活我的“ ALL/NONE”按钮。
目标是当按下 ALL/NONE 按钮时,它会在选中所有复选框和选中其中的 none 之间交替。问题是在文本框中按下回车似乎也激活了观察,即使它应该只通过按钮激活。
library(shiny)
library(shinyWidgets)
Habitat <- c("grass", "water", "stone")
ID <- c(1, 2, 3)
data <- data.frame(ID, Habitat)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
width = 2,
textInput("keyword_search", label = "Search by Keyword"),
uiOutput("h_button"),
uiOutput("habitat_filter")
),
mainPanel(width = 10
))
)
server <- function(input, output, session) {
output$habitat_filter <- renderUI({
habitat_choices <- checkboxGroupInput(inputId = "habitat", label = "",
choices = unique(data$Habitat[!is.na(data$Habitat)]),
selected = unique(data$Habitat[!is.na(data$Habitat)]))
})
output$h_button <- renderUI({
habitat_button <- checkboxGroupButtons(
inputId = "habitat_switch",
choices = "ALL / NONE",
size = "sm",
selected = "ALL / NONE")
})
observe({ #all/none button for habitats
x <- input$habitat_switch
if (!is.null(x)) {
x <- unique(data$Habitat[!is.na(data$Habitat)])
}
else {
x <- character(0)
}
updateCheckboxGroupInput(
session,
"habitat",
label = NULL,
choices = unique(data$Habitat[!is.na(data$Habitat)]),
selected = x
)
})
}
shinyApp(ui = ui, server = server)
奇怪的是,如果在 sidebarLayout 之外进行编码,这个问题似乎就会消失。即如果 ui 边看起来像这样:
ui <- fluidPage(
textInput("keyword_search", label = "Search by Keyword", width = '100%', placeholder = "Type here to search the archive..."),
uiOutput("h_button"),
uiOutput("habitat_filter")
)
不幸的是,我需要侧边栏,所以删除它不是解决问题的选项。有没有人有解决方案来防止连接这些功能?或者解释为什么会这样?
用这个替换我对按钮的观察似乎可以避免这里建议的问题:Select/Deselect All Button for shiny variable selection
observe({ #all/none button for habitats
x <- unique(data$Habitat[!is.na(data$Habitat)])
if (!is.null(input$habitat_switch) && input$habitat_switch >= 0) {
if (input$habitat_switch %% 2 == 0) {
x <- unique(data$Habitat[!is.na(data$Habitat)])
}
else {
x <- character(0)
}
}
updateCheckboxGroupInput(
session,
"habitat",
label = NULL,
choices = sort(unique(data$Habitat[!is.na(data$Habitat)])),
selected = x
)
})
最初仍然不知道是什么原因导致了这个问题,但这个解决方法似乎已经足够好了
我正在尝试设计一个搜索功能,您可以在其中通过文本输入和复选框进行搜索(我使用的是 shinyWidgets),除了某些原因,当您在文本输入中按下回车键时,它会激活我的“ ALL/NONE”按钮。
目标是当按下 ALL/NONE 按钮时,它会在选中所有复选框和选中其中的 none 之间交替。问题是在文本框中按下回车似乎也激活了观察,即使它应该只通过按钮激活。
library(shiny)
library(shinyWidgets)
Habitat <- c("grass", "water", "stone")
ID <- c(1, 2, 3)
data <- data.frame(ID, Habitat)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
width = 2,
textInput("keyword_search", label = "Search by Keyword"),
uiOutput("h_button"),
uiOutput("habitat_filter")
),
mainPanel(width = 10
))
)
server <- function(input, output, session) {
output$habitat_filter <- renderUI({
habitat_choices <- checkboxGroupInput(inputId = "habitat", label = "",
choices = unique(data$Habitat[!is.na(data$Habitat)]),
selected = unique(data$Habitat[!is.na(data$Habitat)]))
})
output$h_button <- renderUI({
habitat_button <- checkboxGroupButtons(
inputId = "habitat_switch",
choices = "ALL / NONE",
size = "sm",
selected = "ALL / NONE")
})
observe({ #all/none button for habitats
x <- input$habitat_switch
if (!is.null(x)) {
x <- unique(data$Habitat[!is.na(data$Habitat)])
}
else {
x <- character(0)
}
updateCheckboxGroupInput(
session,
"habitat",
label = NULL,
choices = unique(data$Habitat[!is.na(data$Habitat)]),
selected = x
)
})
}
shinyApp(ui = ui, server = server)
奇怪的是,如果在 sidebarLayout 之外进行编码,这个问题似乎就会消失。即如果 ui 边看起来像这样:
ui <- fluidPage(
textInput("keyword_search", label = "Search by Keyword", width = '100%', placeholder = "Type here to search the archive..."),
uiOutput("h_button"),
uiOutput("habitat_filter")
)
不幸的是,我需要侧边栏,所以删除它不是解决问题的选项。有没有人有解决方案来防止连接这些功能?或者解释为什么会这样?
用这个替换我对按钮的观察似乎可以避免这里建议的问题:Select/Deselect All Button for shiny variable selection
observe({ #all/none button for habitats
x <- unique(data$Habitat[!is.na(data$Habitat)])
if (!is.null(input$habitat_switch) && input$habitat_switch >= 0) {
if (input$habitat_switch %% 2 == 0) {
x <- unique(data$Habitat[!is.na(data$Habitat)])
}
else {
x <- character(0)
}
}
updateCheckboxGroupInput(
session,
"habitat",
label = NULL,
choices = sort(unique(data$Habitat[!is.na(data$Habitat)])),
selected = x
)
})
最初仍然不知道是什么原因导致了这个问题,但这个解决方法似乎已经足够好了