簡體   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