Fecha brillante Calendario de entrada en el diálogo modal no se mueve con la página de desplazamiento

Voy a conseguir algunos usuarios de formularios de información por una aplicación Shiny. Uso el diálogo modal después de hacer clic en un botton de acción. Fecha es una de estas informaciones que regresa con fecha brillanteInput(). Mi problema es que el calendario mostrado (después de hacer clic en el cuadro de texto de la fecha) en el diálogo modal, no se mueve con el desplazamiento de página. Considere que esperaba recoger varios datos del usuario y el usuario debe desplazarse hacia abajo o hacia arriba la página. En los casos en que el usuario utiliza el teléfono móvil la situación es peor. Proporciono un ejemplo reproducible e imágenes. Gracias con antelación por cualquier recomendación.

ui:

ui<-fluidPage(
  
    
  column(6,offset = 6,
         HTML('
'), ### tags$head() This is to change the color of "Add a new row" button tags$head(tags$style(".butt2{background-color:#231651;} .butt2{color: #e6ebef;}")), div(style="display:inline-block;width:30%;text-align: center;",actionButton(inputId = "Add_row_head",label = "Add", class="butt2") ), ### Optional: a html button # HTML(''), HTML('
') ), column(12,dataTableOutput("Main_table_trich")), tags$script("$(document).on('click', '#Main_table_trich button', function () { Shiny.onInputChange('lastClickId',this.id); Shiny.onInputChange('lastClick', Math.random()) });"), tags$head(tags$style(".butt{background-color:#230682;} .butt{color: #e6ebef;}")), )

servidor:

library(shiny)
library(shinyjs)
library(DT)
library(data.table)
server <- function(input, output, session) {
  
  vals_trich<-reactiveValues()
  vals_trich$Data<-data.frame(cnt_age=c(),
                              cnt_gender=c(),
                              cnt_date=c(),
                              cnt_h_size=c(),
                              stringsAsFactors = FALSE)

  observeEvent(input$Add_row_head, {
    
    showModal(modalDialog(title = "Add person", size="s" ,
                          shiny::div(id =("person"), 
                                     #tags$style(type = "text/css", ".datepicker { z-index: 99999 !important; }"),  
                                     shiny::wellPanel("panel", class = "myclass2", id = "myid2", 
                                                      sliderInput(paste0("cnt_age", input$Add_row_head),
                                                                  label = "Age" ,
                                                                  min = 0, max = 100, value = 0),
                                                      
                                                      
                                                      radioButtons(paste0("cnt_gender", input$Add_row_head),
                                                                   label = "Gender of reported contact",
                                                                   choices = structure(c("Female", "Male","Other"), .Names = c("Female", "Male","Other") ),
                                                                   selected = 99),
                                                      dateInput("cnt_date", "Date:", value = ""),
                                                 
                                                      sliderInput(paste0("cnt_h_size", input$Add_row_head),
                                                                  label = "Age of the contacted person" ,
                                                                  min = 0, max = 20, value = c(20))
                                              
                                                      
                                     )
                                     
                          ), 
                          
                          actionButton("go", "add item"),
                          easyClose = TRUE, footer = NULL ),
             
              
    )
   
  })

  observeEvent(input$go, {
    new_row=data.frame(
      cnt_age=input[[paste0("cnt_age", input$Add_row_head)]],
      cnt_gender=input[[paste0("cnt_gender", input$Add_row_head)]],
      cnt_date=input[["cnt_date"]],
      cnt_h_size=input[[paste0("cnt_h_size", input$Add_row_head)]]
       
    )
    vals_trich$Data<-rbind(vals_trich$Data,new_row )
    removeModal()
  })

 output$Main_table_trich<-renderDataTable({
    DT=vals_trich$Data
    datatable(DT,selection = "single",
              escape=F) })
  
}

Before scrolling the pageAfter scrolling the page up

Pregunta hecha hace 3 años, 4 meses, 28 días - Por syntaxsavvy


2 Respuestas:

  • El problema que estás experimentando se debe a la posición fija del calendario del dateInput en el diálogo modal. Para solucionarlo y hacer que el calendario se mueva con el desplazamiento de la página, puedes agregar una clase CSS al dateInput para cambiar su posición a absoluta en lugar de fija. Aquí te muestro cómo puedes modificar tu código para lograrlo:

    • Agrega una clase CSS adicional al dateInput en tu código de la siguiente manera:
    R
    dateInput("cnt_date", "Date:", value = "", class = "scrollable-date")
    
    • Agrega el siguiente estilo CSS dentro del `tags$head()` en tu código UI para controlar la posición del calendario:
    R
    tags$head(
      tags$style(HTML('
        .scrollable-date .shiny-dateinput-container {
            position: absolute !important;
        }
      '))
    ),
    

    Con estos cambios, el calendario del dateInput en el diálogo modal ahora debería moverse con el desplazamiento de la página. Esto permite una mejor experiencia de usuario al recoger información en dispositivos móviles.

    Respondida el Dec 18, 2020 a las 12:16 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El problema que describes es que el calendario del elemento shiny::dateInput() en tu diálogo modal no se mueve con la página cuando se desplaza. Esto puede deberse a que el calendario se posiciona absolutamente dentro del diálogo modal, lo que no tiene en cuenta el desplazamiento de la página.

    Para resolver este problema, puedes utilizar la propiedad CSS position: fixed para posicionar el calendario de forma que permanezca visible incluso cuando la página se desplace. Aquí tienes un ejemplo de cómo puedes hacerlo:

    
    

    Cambia la propiedad position del calendario en el diálogo modal

    tags$head(tags$style(HTML(" .datepicker { position: fixed; z-index: 99999; } ")))

    Esta solución debería garantizar que el calendario permanezca visible y se desplace con la página, incluso en dispositivos móviles.

    Respondida el Dec 18, 2020 a las 12:28 - por Gemini

    Votos positivos: 0 | Votos negativos: 0