gpt4 book ai didi

javascript - 使用 shinyjs::reset 重置自定义输入 shiny R

转载 作者:行者123 更新时间:2023-11-29 22:45:03 25 4
gpt4 key购买 nike

我有一个用于自定义输入的 Shiny 模块,我正在尝试添加一个按钮以在每次单击此按钮时重置此自定义输入(界面和服务器)。下面是一个使用 shinyjs::reset 的例子:

应用.R

    library(shinyjs)
library(rintrojs)
library(shinydashboard)
library(shinyWidgets)

source("customTextInput.R", local = TRUE, encoding = "UTF-8")

ui <- fluidPage(

useShinyjs(),

# Assembling page
dashboardPage(

# Assembling header
dashboardHeader(title = "Custom Inputs", titleWidth = 1294),

# Assembling sidebar
dashboardSidebar(

sidebarMenu(
menuItem("Custom inputs reset", tabName = "custom", icon = icon("search"))
)

),
# Assembling the body of the page
dashboardBody(

tabItems(
tabItem(tabName = "custom",
br(),
br(),
customTextInputUI("text1"),
fluidPage(

textInput(inputId = "text2", label = "Native text input", width = "100%"),
actionButton(inputId = "reseter1", label = "Reset custom"),
actionButton(inputId = "reseter2", label = "Reset native")

),
)

)

)

)
)

server <- function(input, output, session) {

{### Reset -----

observe({

shinyjs::onclick("reseter1", {
reset("text1")
})

})

observe({

shinyjs::onclick("reseter2", {
reset("text2")
})

})

}

}

shinyApp(ui, server)

自定义文本输入.R

library(shinyjs)


{# UI Module -----

customTextInputUI <- function(id, addWidth = "100%", addHeight="64px", addTop="5px", addValue = "") {

if (is.null(addValue)){addValue <- ""}

ns <- NS(id)

return(

fluidPage(

HTML(

sprintf(

"
<form id='%s' autocomplete='off' class = 'form-group shiny-input-container' style = 'padding-top:%s; width:%s; height:%s;'>
<label for='%s'>Custom text input</label>
<input charset='UTF-8' type='text' class = 'form-control'
id='%s' data-slots=' ' value = \"%s\"
data-shinyjs-resettable-id='%s' data-shinyjs-resettable-type='Text' data-shinyjs-resettable-value='' required>
</form>", ns('textBloco'), addTop, addWidth, addHeight, ns('textInput'), ns('textInput'), addValue, ns('textInput')))

)

)

}

}

在这种情况下,reseter2 可以重置 shiny text2 原生 textInput,但是 reseter1 不能重置自定义输入 text1。

为什么会出现这种意外行为?是否有任何解决方法,也许使用纯 javascript?

提前致谢!

最佳答案

如果您检查 text1 的输入 ID,您将看到它显示为 text1-textBloco enter image description here

因此,为了让您的 reset 正常工作,您可以将其更新为 reset("text1-textBloco") 然后它应该会正常工作。

或者,您可以将 customerTextInput.R 更新为仅 id 然后它应该与 app.R 中的 reset("text1") 一起工作。所以 sprintf() 会是这样的:

sprintf(    
"
<form id='%s' autocomplete='off' class = 'form-group shiny-input-container' style = 'padding-top:%s; width:%s; height:%s;'>
<label for='%s'>Custom text input</label>
<input charset='UTF-8' type='text' class = 'form-control'
id='%s' data-slots=' ' value = \"%s\"
data-shinyjs-resettable-id='%s' data-shinyjs-resettable-type='Text' data-shinyjs-resettable-value='' required>
</form>", id, addTop, addWidth, addHeight, ns('textInput'), ns('textInput'), addValue, ns('textInput')))

)

关于javascript - 使用 shinyjs::reset 重置自定义输入 shiny R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924585/

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