Как связать checkboxInputs без использования radioButtons в Shiny? - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь создать два checkboxInput в приложении R Shiny, которые ведут себя так, что одновременно может быть включен только один, но не иметь ни одного из них также должны быть опцией (по сути, оба они не могут быть правдойв то же время).

ui <- fluidPage(
  checkboxInput("box1", "Test1", value = F),
  checkboxInput("box2", "Test2", value = F)
)

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

  observeEvent(input$box1, {

    if (input$box2){
      updateCheckboxInput(session,
                          "box2",
                          value = F)
    }

  })

  observeEvent(input$box2, {

    if (input$box1){
      updateCheckboxInput(session,
                          "box1",
                          value = F)
    }

  })
}

shinyApp(ui = ui, server = server)

Вышеуказанное приложение почти делает то, что я хочу, но выбор box2 при выборе box1 просто отключает их оба вместо выбора box2 и отмены выбора box1,В идеале, когда один из блоков выбран, выбор другого должен отключить первый и включить второй. Это возможно без использования radioButtons?

1 Ответ

0 голосов
/ 24 октября 2019

Вы можете сделать это, используя код javascript из html, отметив только один флажок в группе

Поэтому, если вы сохраните checkboxOne.js в каталоге www:

$(document).ready(function(){

$("input:checkbox").on('click', function() {
  // in the handler, 'this' refers to the box clicked on
  var $box = $(this);
  if ($box.is(":checked")) {
    // the name of the box is retrieved using the .attr() method
    // as it is assumed and expected to be immutable
    var group = "input:checkbox[name='" + $box.attr("name") + "']";
    // the checked state of the group/box on the other hand will change
    // and the current value is retrieved using .prop() method
    $(group).prop("checked", false);
    $box.prop("checked", true);
  } else {
    $box.prop("checked", false);
  }
});

});



ui <- fluidPage(
  tags$head(tags$script(src = "checkboxOne.js"
    )),

  checkboxGroupInput("check_box", "Test", choices = c("Test1", "Test2"))
)

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


}

shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...