在Shiny中的Selectize onChange

4

我希望在 shiny 的 selectize 控件中选择选项时触发一些功能。但是,我不想在服务器端触发函数,而是在客户端触发。Observe 和 observeEvent 是在服务器端起作用的(server.R),但这不是我想要的。

我尝试了下面的代码,但在 ui.R 中没有起作用。

  tags$script('
              $( document ).ready(function() {
                $("#fTICKER4").selectize({
                      onChange: function () {
                      alert("Selectize event: Change");
                  }
              });
            '),

请在Shiny中提供一种前进的方式。
1个回答

6
如果您希望在小部件的值更改时触发某些JavaScript函数, 那么您应该查看这个文章。在其中,您将找到许多Shiny支持的JavaScript事件。
让我们来看一个shiny:inputchanged事件,因为它可以实现您想要的功能:

当输入具有新值时(例如,单击操作按钮或键入文本输入),将触发shiny:inputchanged事件。 事件对象具有属性name(输入的id),value(输入的值)和inputType(输入的类型,例如shiny.action)。

还有一个很好的例子。
$(document).on('shiny:inputchanged', function(event) {
  if (event.name === 'foo') {
    event.value *= 2;
  }
});

通过更改小部件的ID并将event.value...替换为alert函数,可以轻松调整它。因此,就我理解你的问题而言,您正在寻找此代码块:

 $(document).on("shiny:inputchanged", function(event) {
                if (event.name === "fTICKER4") {
                  alert("inputchanged event: Change");
                }
              });

完整示例

library(shiny)
ui <- fluidPage(
  tags$script('
              $(document).on("shiny:inputchanged", function(event) {
                if (event.name === "fTICKER4") {
                  alert("inputchanged event: Change");
                }
              });
            '),
  sliderInput("fTICKER4", "Change triggers an event", min = 1, max = 10, value = 5),
  sliderInput("other", "Change doesn't trigger an event",   min = 1, max = 10, value = 5)
)

server <- function(input, output) { 

}

shinyApp(ui, server)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接