gpt4 book ai didi

r - Shiny 的动态 selectizeInput

转载 作者:行者123 更新时间:2023-12-01 20:08:50 30 4
gpt4 key购买 nike

我试图允许用户在 selectizeInput 中键入值,以从长列表中查找他们正在搜索的内容(从而避免滚动操作)。当用户删除默认值“None”(在本例中)时,他们会被踢出输入框,必须返回并输入他们要查找的内容。有没有办法避免这种情况,以便用户可以退格“无”来删除它并搜索值,而不会被推出盒子?

library(shiny)
library(shinydashboard)


ui <- dashboardPage(
dashboardHeader(title = "Dynamic selectInput"),
dashboardSidebar(
sidebarMenu(
menuItemOutput("menuitem")
)
),
dashboardBody(
selectizeInput("heir1","Heirarchy1",c("NONE",letters),selected="NONE"),
selectizeInput("heir2","Heirarchy2",c("NONE",letters),selected="NONE"),
selectizeInput("heir3","Heirarchy3",c("NONE",letters),selected="NONE")
)
)

server <- function(input, output, session) {
output$menuitem <- renderMenu({
menuItem("Menu item", icon = icon("calendar"))
})

heirarchy<-c(letters)

observe({
hei1<-input$heir1
hei2<-input$heir2
hei3<-input$heir3

choice1<-c("NONE",setdiff(heirarchy,c(hei2,hei3)))
choice2<-c("NONE",setdiff(heirarchy,c(hei1,hei3)))
choice3<-c("NONE",setdiff(heirarchy,c(hei1,hei2)))

updateSelectizeInput(session,"heir1",choices=choice1,selected=hei1)
updateSelectizeInput(session,"heir2",choices=choice2,selected=hei2)
updateSelectizeInput(session,"heir3",choices=choice3,selected=hei3)

})

}

shinyApp(ui, server)

最佳答案

您可以使用 Selectize JS 中的任何一个通过 selectizeInput()options 参数来添加插件。

请注意,仅更新第一个输入。

这是代码:

library(shiny)
library(shinydashboard)


ui <- dashboardPage(
dashboardHeader(title = "Dynamic selectInput"),
dashboardSidebar(
sidebarMenu(
menuItemOutput("menuitem")
)
),
dashboardBody(

selectizeInput("heir1","Heirarchy1",c("NONE",letters),selected="NONE",
# use this syntax to bring in selectize.js plugins :)
options = list(plugins = list('restore_on_backspace'))),

selectizeInput("heir2","Heirarchy2",c("NONE",letters),selected="NONE"),
selectizeInput("heir3","Heirarchy3",c("NONE",letters),selected="NONE")
)
)

server <- function(input, output, session) {
output$menuitem <- renderMenu({
menuItem("Menu item", icon = icon("calendar"))
})

heirarchy<-c(letters)

observe({

hei1<-isolate(input$heir1) # don't allow re-evaluation as users type

hei2<-input$heir2
hei3<-input$heir3

choice1<-c("NONE",setdiff(heirarchy,c(hei2,hei3)))
choice2<-c("NONE",setdiff(heirarchy,c(hei1,hei3)))
choice3<-c("NONE",setdiff(heirarchy,c(hei1,hei2)))

updateSelectizeInput(session,"heir1",choices=choice1,selected=hei1)
updateSelectizeInput(session,"heir2",choices=choice2,selected=hei2)
updateSelectizeInput(session,"heir3",choices=choice3,selected=hei3)

})

}

shinyApp(ui, server)

请注意,isolate() 对于防止 updateSelectizeeInput() 被重新调用并在用户键入时弄乱所有内容是必要的。

编辑:

抱歉,伙计,当我回答时,误读了您想要的行为。我想如果你删除 options =,但保留 isolate(),你会得到你想要的。

selectizeInput("heir1","Heirarchy1",c("NONE",letters),selected="NONE")

正是没有 isolate()updateSelectizeInput() 导致光标离开输入字段并要求用户在删除后重新单击。

如果这不是您所描述的内容,请告诉我。干杯!

关于r - Shiny 的动态 selectizeInput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343552/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com