2014-10-06 4 views
6

나는 작은 질문이 있었다. 나는 이것을 많이 연구하려고 노력했지만 운이 없었습니다. R-shiny가 버튼과 같은 요소를 두 번 클릭하는 방법이 있습니까?더블 클릭 R - shiny

답변

12

여기 한 가지 방법이 있습니다. 핵심은 클라이언트 측 (예 : ui)에서 dblclick 이벤트를 감지 한 다음 Shiny.onInputChange을 호출하여 R 변수의 값을 업데이트하는 것입니다. 그러면이 변수를 서버에서 선택할 수 있습니다.

버튼을 두 번 클릭하면 어떻게됩니까?

  1. 값이 1
  2. 씩 증가되는 증분 값은 변수 x를 업데이트하기 위해 사용된다.
  3. 서버가 변경을 감지합니다. x
  4. 서버가 textOutput을 업데이트합니다.
library(shiny) 

ui = bootstrapPage(
    tags$button(id = 'mybutton', 'button', class='btn btn-primary', value = 0), 
    textOutput('x'), 
    # when button is double clicked increase the value by one 
    # and update the input variable x 
    tags$script(" 
    $('#mybutton').on('dblclick', function(){ 
     var val = +this.value 
     this.value = val + 1 
     Shiny.onInputChange('x', this.value) 
     console.log(this.value) 
    }) 
    ") 
) 

server = function(input, output, session){ 
    output$x <- renderText({ 
    input$x 
    }) 
} 

runApp(list(ui = ui, server = server)) 
0

나는 아래의 의견에 따라 내 대답을 업데이 트했습니다. 여기에서는 더블 클럭과 일반 클릭을 구별하기 위해 0.2 초의 시간차 임계 값을 사용했습니다. 내 응용 프로그램에서 약간 다른 접근 방식을 사용했습니다. 나는 버튼이 2로 나눌 수 있는지 없는지 확인함으로써 얼마나 많은 시간 동안 버튼을 눌렀는지 확인한다.

library(shiny) 
t1 <<- Sys.time() 

ui =fluidPage(
    actionButton("my_button", "Dont Touch it!"), 
    mainPanel(textOutput("x")) 
) 
server = function(input, output, session){ 
    my_data <- reactive({ 
    if(input$my_button == 0) 
    { 
     return() 
    } 

    if(input$my_button%%2!=0) 
    {  
     t1 <<- Sys.time() 
    } 
    if(input$my_button%%2==0 & (Sys.time() - t1 <= 0.2)) 
    {  
     "You pushed the button twice!" 
    } 
    }) 
    output$x <- renderText({my_data()}) 
} 
runApp(list(ui = ui, server = server)) 
+0

AFAIK 두 번의 단일 클릭은 두 번 클릭과 동일하지 않습니다. – Ramnath

+0

@Ramnath "double click"시간 임계 값을 포함하도록 답변을 업데이트했습니다. –