R Shiny点击按钮无法清空textInput输入框问题咨询
点击按钮清空Shiny textInput输入框内容实现方法
原有代码失效原因
reset()是HTML<form>元素的专属方法,作用是重置表单内所有控件为初始值,单个input元素不支持该方法,直接调用无效果。- 代码加载了
shinyjs包但未在UI层添加useShinyjs()做初始化,shinyjs相关功能无法正常运行。
可用实现方案
方案1:shinyjs内置reset方法(推荐)
无需手写原生JS,shinyjs的reset()函数会自动将控件重置为初始定义值,你初始设置textInput的value为空字符串,刚好匹配清空需求。
修正后完整代码:
library(shiny) library(shinyjs) runApp( list( ui = shinyUI(fluidPage(theme = "bootstrap.css", useShinyjs(), # 新增:初始化shinyjs fluidRow( column(8, align="center", offset = 2, textInput("string", label="Input",value = "", width = "100%"), tags$style("#string { height: 50px; width: 100%; text-align:center; font-size: 15px; display: block;}") ) ), fluidRow( column(6, align="center", offset = 3, actionButton("button",label = "Clear"), tags$style(type='text/css', "#button { vertical-align: middle; height: 50px; width: 100%; font-size: 30px;}") ) ) ) ), server = shinyServer(function(input, output) { observeEvent(input$button,{ reset("string") # 直接调用shinyjs重置方法 }) })))
方案2:原生JS实现
如果要手写JS逻辑,直接给input元素的value属性赋值为空字符串即可,同样需要保留useShinyjs()初始化。
将原有observeEvent内的代码替换为:
observeEvent(input$button,{ shinyjs::runjs("document.getElementById('string').value = '';") })
方案3:Shiny原生方法(无需依赖shinyjs)
不需要加载shinyjs包,直接用Shiny自带的输入控件更新函数即可实现清空:
# 移除library(shinyjs)和useShinyjs()相关代码,server端逻辑如下 observeEvent(input$button,{ updateTextInput(inputId = "string", value = "") })
内容的提问来源于stack exchange,提问作者manu p
相关产品推荐
相关产品推荐

