R 如何控制selectizeInput中输入的值,确保它们属于预先定义的列表?
我希望当用户退出selectizeInput字段(在selectizeInput之外单击)时,会创建并选择一个新选项(option createOnBlur=TRUE),但我不知道如何控制创建的值以确保它们属于“选项”列表 事实上,我希望createOnBlur=TRUE使用create=FALSE,但这显然不起作用 我看过selectize.js文档,我认为createFilter和/或onBlur()选项可能有用,但我没有成功地实现它 这是一个带有年龄输入的reprex,我希望当用户磁带如“40”,然后在输入之外点击而不按“Enter”(即onBlur)时,值40会记录在输入中,但如果用户磁带如“444”,则不会在选项列表中创建此不可能的年龄值:R 如何控制selectizeInput中输入的值,确保它们属于预先定义的列表?,r,shiny,onblur,selectize.js,R,Shiny,Onblur,Selectize.js,我希望当用户退出selectizeInput字段(在selectizeInput之外单击)时,会创建并选择一个新选项(option createOnBlur=TRUE),但我不知道如何控制创建的值以确保它们属于“选项”列表 事实上,我希望createOnBlur=TRUE使用create=FALSE,但这显然不起作用 我看过selectize.js文档,我认为createFilter和/或onBlur()选项可能有用,但我没有成功地实现它 这是一个带有年龄输入的reprex,我希望当用户磁带如“
library(shiny)
input_age <- function(mina = 0, maxa =100){
selectizeInput(inputId = "age",
label = "Age",
choices = c("choose one" = "", mina:maxa),
options = list(create = TRUE,
createOnBlur = TRUE)
)
}
ui <- shinyUI(fluidPage(
titlePanel("selectize createonblur"),
mainPanel(
input_age(mina = 20, maxa = 70)
)
))
# SERVER
server <- shinyServer(function(input, output) {
})
shinyApp(ui, server)
库(闪亮)
input_age您可以使用updateSelectizeInput
检查每次与输入交互后所做的选择
请参见以下内容:
library(shiny)
input_age <- function(mina = 0, maxa = 100){
selectizeInput(inputId = "age",
label = "Age",
choices = c("choose one" = "", mina:maxa),
options = list(create = TRUE,
createOnBlur = TRUE)
)
}
minAge <- 20
maxAge <- 70
ui <- shinyUI(fluidPage(
titlePanel("selectize createonblur"),
mainPanel(
input_age(mina = minAge, maxa = maxAge)
)
))
# SERVER
server <- shinyServer(function(input, output, session) {
observeEvent(req(input$age), {
if(length(setdiff(input$age, as.character(seq(minAge, maxAge)))) > 0){
updateSelectizeInput(session,
inputId = "age",
choices = seq(minAge, maxAge),
selected = "")
}
})
})
shinyApp(ui, server)
库(闪亮)
输入\u age您可以向createFilter
选项提供正则表达式。如果用户键入的内容与此正则表达式不匹配,则“添加…”将不会出现,并且无法添加此项
library(shiny)
ui <- fluidPage(
titlePanel("selectize createonblur"),
mainPanel(
selectizeInput(
inputId = "age",
label = "Age",
choices = c("choose one" = "", 20:70),
options = list(
create = TRUE,
createOnBlur = TRUE,
createFilter = I("/^([2-6][0-9]|70)$/")
)
)
)
)
server <- function(input, output, session) {}
shinyApp(ui, server)
库(闪亮)
ui感谢您在服务器端提供此解决方案!你知道是否有办法在ui端实现相同的解决方案,例如使用“onblur()”或createfilter选项吗?Hi@Stéphanelant刚刚尝试了上面的代码-我仍然可以添加“444”作为选项。是的,我认为这是因为字符串“44”包含在“444”中。实际上,您不能添加'112',但可以添加'120',因为存在与'20'匹配的项。。。更糟糕的行为:你可以添加“44任何东西”!但无论如何,非常感谢你们两位的回答@Youenn抱歉,适当的正则表达式是I(“/^([2-6][0-9]|70)$/”
。太好了,谢谢!我真的需要提高我的正则表达式技能。
library(shiny)
ui <- fluidPage(
titlePanel("selectize createonblur"),
mainPanel(
selectizeInput(
inputId = "age",
label = "Age",
choices = c("choose one" = "", 20:70),
options = list(
create = TRUE,
createOnBlur = TRUE,
createFilter = I("/^([2-6][0-9]|70)$/")
)
)
)
)
server <- function(input, output, session) {}
shinyApp(ui, server)