2016-07-13 2 views
1

私の状況は次のとおりです。アクションボタン(次へ)といくつかのラジオボタンがあります。毎回、アクションボタンをクリックし、ラジオボタンを選択せず​​に、入力値を入力する必要があります。入力$ radioはNULLにリセットする必要があります(最初と同じ)。 次のようにサーバー・ファイル内の私のアプローチがあった。これは、のレイアウトを呼び出してみましょうするために正常に動作しますRのシャイニー:ボタンをクリックして入力値をNULLに設定する方法は?

observeEvent(input$Next, { 
    updateRadioButtons(session, "choice", label = "", choices = list("A" = 1, "B" = 2, "C" = 3), selected = FALSE) 
}) 

。ボタンを押すたびに、前からの選択はもう表示されません。しかし、入力$ choice(ラジオボタンからの入力)は以前と同じ値を持ちます。しかし、ラジオボタンの後にいくつかの条件付きパネルがあるので、これをNULLにリセットしたいと思っています。これは$ choice!= nullを入力したときにだけトリガされます。 私は非常に助けを感謝します!

+1

以下はこれを行う方法を簡単な例です。 'isolate()'関数も見てください。 –

+0

選択なしのラジオボタンを持つことは可能ですが(長さ0のベクトルを 'selected'引数に渡すことによって)、値を入力するとアプリケーションを更新せずにすべての選択をクリアすることができるとは思えません(おそらく、 – Benjamin

答えて

5

クライアント(ブラウザ)側から値を上書きすることができます。

Shiny.onInputChangeと呼ばれるinput変数にさまざまな値を割り当てるために使用されるinbuild関数があります。これは、Rセッションにデータ(ブラウザで選択されたもの)を送信するために使用されるJavaScript関数です。このようにしてnull(JavaScriptはR NULLに相当)をinput変数に代入して、それを "リセット"することができます。

もちろん、Rサーバーからクライアント側をトリガーする必要があります。これは、onInputChangeのようなcustomMessageHandlerによって行われます。クライアント側にリスナーをインストールします。このリスナーは、クライアントに送信するメッセージを処理できます。

これらの概念について知りたいことはすべてhereです。私はあなたが `入力の$ choice`値を使用しますが、`入力の$ choice`値を取る反応性値を作成しないことをお勧め

library(shiny) 

ui <- fluidPage(
    actionButton("Next", "Next"), 
    radioButtons("choice", label = "", choices = list("A" = 1, "B" = 2, "C" = 3), selected = character(0)), 
    textOutput("status"), 
    tags$script(" 
    Shiny.addCustomMessageHandler('resetValue', function(variableName) { 
     Shiny.onInputChange(variableName, null); 
    }); 
    ") 
) 

server <- function(input, output, session){ 

    output$status <- renderText({input$choice}) 

    observeEvent(input$Next, { 
    updateRadioButtons(session, "choice", selected = character(0)) 
    session$sendCustomMessage(type = "resetValue", message = "choice") 
    }) 
} 

shinyApp(ui, server) 
+0

@ K. Rohdeこれはすばらしく見える - リンクと特にあなたの例のために非常に感謝します。条件付きパネルで状態をどのように使用できるか知っていますか? –

+0

@PatrickBaladaより正確なことができますか?あなたが探している条件は何ですか?私はそれができると確信しています。 –

+0

これは非常に役に立ちました。入力値が変化していなくても、observeEventを強制する必要がありました。 – tcash21

関連する問題