2013-10-26 1 views
23

Я ищу способ реализовать функциональность отключения/абзаца над моими элементами shinyUI. Herexiaodaigh дает подсказку о том, как отключить/включить actionButton (см. Изображение ниже), и это мой желаемый результат, но код не делает трюк с другими элементами gui, которые я тестировал (например, numericInput).R Shiny - disable/able shinyUI elements

(я знаю conditionalPanel особенность, но это не эффект, который я хотел бы иметь.)

Я бы сильно признателен за любые предложения, особенно потому, что я не очень знаком с JavaScript.

enter image description here

ответ

2

, что о том, когда ваши элементы «исчезают», когда определенное условие ложно.

Если это ваше намерение Вы можете добавить это в ваш server.R

output$sliderInputUI <- renderUI({ 
    if (condition == TRUE) { 
     sliderInput("id", "text", 
      min = 1, max = 8, 
      value = 1, step = 1 
     ) 
    } 
}) 

Добавьте это в ui.R htmlOutput («sliderInputUI»)

sliderInput будет отображаться только в вашем ui, когда условие TRUE.

+0

Как вы называете «идентификатор», если условие не выполнено? Кажется, что Shiny создает ошибку, когда вы ссылаетесь на несуществующую входную переменную. – Sweetbabyjesus

+1

Вы можете использовать 'if (! Is.null (input $ id))' для обозначения несуществующей входной переменной. – tnaake

+0

Как sliderInputUI упоминается в ui? Ответ: uiOutput ("sliderInputUI") – PeterVermont

27

Причина, по которой код, на который вы ссылаетесь в своем вопросе, не работает для других виджетов ввода, заключается в том, что разные входные виджеты нуждаются в разных вызовах JavaScript, чтобы отключиться. Еще одна проблема заключается в том, что когда блестящий создает элемент ввода, иногда идентификатор, который вы указываете, является идентификатором фактического тега ввода HTML, а иногда этот идентификатор присваивается контейнеру входного тега.

У пакета shinyjs есть функция disable, которая будет работать как есть с любым блестящим входом. Отказ от ответственности: я написал этот пакет.

Вот как вы бы достичь Обезвреживая numericInput, как вы просили

library(shiny) 
runApp(shinyApp(
    ui = fluidPage(
    shinyjs::useShinyjs(), 
    numericInput("test", "Test", 5), 
    actionButton("submit", "Choose") 
), 
    server = function(input, output, session) { 
    observeEvent(input$submit, { 
     shinyjs::disable("test") 
    }) 
    } 
)) 
+1

это отличный пакет, спасибо! – Cauchy

+0

Есть ли способ сделать это для определенного выбора в 'selectInput()' widget? Следуя вашим инструкциям, похоже, что он отключает мой виджет 'radioButtons()' независимо от того, какой параметр выбран в виджета 'selectInput()', поскольку вход на сервер не привязан к вариантам ответа. – syntonicC

+0

К сожалению, вы не можете отключить/включить определенные параметры внутри ввода. Это верно для флажков, радио, выбора и т. Д. Это просто потому, что весь вход имеет идентификатор, но конкретные параметры не имеют –

 Смежные вопросы

  • Нет связанных вопросов^_^