Javascript逻辑运算符在R Shiny 中不起作用

标签 javascript shiny

所以,一旦滚动一定距离,我就一直在努力向我的 R Shiny 应用程序添加一个条件。经过大量调试后,我至少意识到一个最初的问题阻碍了我的前进。 JavaScript 中的逻辑运算符不起作用。下面是一个不完整的玩具示例,但希望您不需要一个工作示例来弄清楚发生了什么。

shinyUI(fluidPage(
  ...
  tags$body(
   ...
     tags$script('
                  window.onscroll = function() {myFunction()};
                  function myFunction() {
                    var x = 5;
                    var y = 3;
                    if(y < x){
                      sidebar.classList.add("stickyTop");
                    }
                  }')
)))

如果我删除 if 部分,则一旦我滚动,就会添加“stickyTop”特征。离开,if 语句中看似明显正确的语句,不会激活“stickyTop”。使用其他变量、将它们移到函数之外或我尝试过的任何其他方法都不起作用。

使用 if(1) 有效,if(true) 也有效,if(0<1) 无效。我做错了什么?

对于那些好奇的人,我的“stickyTop”是在我的 css 文件中定义的:

.stickyTop {
  position: fixed;
  top: 0;
  height: 100vh;
}

更长的代码(不太有效的 MWE,很难削减我的代码,随机包含另一个 MWE 的一部分):

library(shiny)

ui <- (fluidPage(fluidRow(
  id = "title",
  column(
    8,
    titlePanel(
      title = div(strong("Stuff"),
                  style = "color:black;"),
      windowTitle = "Mores tuff"
    ),
    p("Last updated on June 22, 2018", id = "id_updated_time"),
    br()
  )#,),

  tags$body(sidebarLayout(
    sidebarPanel(
      id = "sidebar",
      actionButton("evReactiveButton", "eventReactive"),
      br(),
      actionButton("obsEventButton", "observeEvent"),
      br(),
      actionButton("evReactiveButton2", "eventReactive2")
    ),
    mainPanel(#style="position:sticky;",
      verbatimTextOutput("eText"),
      verbatimTextOutput("oText")),

    tags$script(
      '
      window.onscroll = function() {myFunction()};

      function myFunction() {
      var x = 5;
      var y = 3;
      if(1){
      sidebar.position.fixed;
      }
      }'
    )
    ) # Close sidebarLayout
    ) # Close tags$body
    )))

  server <- function(input, output) {
    etext <- eventReactive(input$evReactiveButton, {
      runif(1)
    })
    observeEvent(input$obsEventButton, {
      output$oText <- renderText({
        runif(1)
      })
    })
    eventReactive(input$evReactiveButton2, {
      print("Will not print")
      output$oText <- renderText({
        runif(1)
      })
    })
    output$eText <- renderText({
      etext()
    })
  }

  shinyApp(ui = ui, server = server) 

最佳答案

您好,您需要将 JavaScript 放入 einem HTML 标记中。

tags$script(HTML(
        '
        function myFunction() {
        var x = 5;
        var y = 3;
        if(y < x){
        $("#sidebar").css({
        "position": "fixed",
        "top": "0",
        "height": "100vh",
        });
        }
        }

        window.onscroll = function() {myFunction()};'
    ))

希望这有帮助!!

关于Javascript逻辑运算符在R Shiny 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50996717/

相关文章:

javascript - 在对每个条目执行请求时迭代数组

javascript - Rails ERB 内部 Javascript

javascript - 为什么使用 XMLHttpRequest 不显示此 XML 文档的标题标签?

r - 如何在 Shiny 中填充 tinyMCE 文本区域?

r - 在空 tibble 中,列类型根据第一行的添加方式而变化

javascript - 在 chrome.storage.local 中存储客户端生成的密码的安全隐患

javascript - 如何将换行符从 HTML div 复制到 jQuery 中的文本区域?

使用操作按钮刷新主面板屏幕

r - Shiny :renderUI react 性问题

r - 在客户端使用 afterChange 事件更改 rHandsontable 的单元格背景