繁体   English   中英

R shiny:如何使用 shinyjs 清除具有默认值的输入字段?

[英]R shiny: how to clear an input field with a default value using shinyjs?

我正在尝试使用 shinyjs 包来清除和禁用在我的 shiny 应用程序中具有默认值的输入字段。 清除/禁用按钮似乎有效。 但是,当我点击提交时,默认值仍在提交(见下图)。 如何让它提交 NULL 或空字符串?

在此处输入图像描述

library(shinyjs)
library(shiny)

# this is supposed to change the input value to null
jsCode <- 'shinyjs.clear_input = function(params){
    var defaultParams = {
    input_id : null
  };
  params = shinyjs.getParams(params, defaultParams);
  var el = $("#" + params.input_id);
    el.val(null);}'

  shinyApp(

    ui = fluidPage(
      useShinyjs(),  
      extendShinyjs(text = jsCode, functions = c("clear_input")),
      textInput("input",  label = "input", value = "default text"),
      actionButton("clear", label = "clear/disable"),
      actionButton("submit", "submit"),
      tags$div(id="result")
      ),
    server = function(input, output) {
      
      observeEvent(input$clear, {
        js$clear_input("input")
        disable("input")
      })

      observeEvent(input$submit, {
        insertUI("#result", ui=renderText(input$input))
      })
    }
  )

就个人而言,我对 javascript 不是很满意,所以我尽量避免使用并在 R 中使用。您可以使用updateTextInput来更新textInput中的值。

library(shiny)
library(shinyjs)

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    textInput("input",  label = "input", value = "default text"),
    actionButton("clear", label = "clear/disable"),
    actionButton("submit", "submit"),
    tags$div(id="result")
  ),
  server = function(input, output, session) {
    
    observeEvent(input$clear, {
      updateTextInput(session, "input", value = "")
      disable("input")
    })
    
    observeEvent(input$submit, {
      insertUI("#result", ui=renderText(input$input))
    })
  }
)

在此处输入图像描述

坚持使用 Javascript 并遵循 Ronak 的想法使用updateTextInput()

library(shinyjs)
library(shiny)

# this is supposed to change the input value to null
jsCode <- 'shinyjs.clear_input = function(params){
    var defaultParams = {
    input_id : null
  }
  ;
  params = shinyjs.getParams(params, defaultParams);
  var el = $("#" + params.input_id);
    el.val(null);}'

shinyApp(
  
  ui = fluidPage(
    useShinyjs(),  
    extendShinyjs(text = jsCode, functions = c("clear_input")),
    textInput("input",  label = "input", value = "default text"),
    actionButton("clear", label = "clear/disable"),
    actionButton("submit", "submit"),
    tags$div(id="result")
  ),
  server = function(input, output) {
    
    observeEvent(input$clear, {
      updateTextInput(inputId="input", value=js$clear_input("input"))
      disable("input")
    })
    
    observeEvent(input$submit, {
      insertUI("#result", ui=renderText(input$input))
    })
  }
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM