我想使用带有shiny的jquery UI (不使用shinyjqui库)。当我有一个层并试图使用jqueryUI移动它时,它工作得很好,但是当这个层是使用insertUI动态生成的时候,它就不起作用了。
代码如下:
library(shiny)
ui <- fluidPage(theme = "style.css",
tags$script(src = "jquery-ui.js"),
tags$script(src = "script2.js"),
actionButton("add","Add layer"),
div(class="aux"),
div(id="works",style="width:300px;height:200px;background:red"))
server <- function(input, output, session) {
observeEvent(input$add,{
insertUI(
selector = ".aux",
where="afterEnd",
ui = div(id=paste0("new",input$add),style="width:300px;height:200px;background:blue")
)
})
}
shinyApp(ui, server)和js脚本
$( function() {
$("#works").draggable();
$("#new1").draggable();
});谢谢!
发布于 2018-12-27 20:40:17
这是因为#new1在启动时并不存在。您必须在创建javascript代码之后执行它,例如使用shinyjs::runjs。并在insertUI中使用immediate=TRUE。
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
tags$head(
tags$script(src = "jquery-ui/jquery-ui.min.js"),
tags$script("$(function() {
$('#works').draggable();
})")
),
actionButton("add","Add layer"),
div(class="aux"),
div(id="works",style="width:300px;height:200px;background:red"))
server <- function(input, output, session) {
observeEvent(input$add,{
insertUI(
selector = ".aux",
where="afterEnd",
ui = div(id=paste0("new",input$add), style="width:300px;height:200px;background:blue"),
immediate = TRUE
)
runjs("$('#new1').draggable();")
})
}
shinyApp(ui, server)

https://stackoverflow.com/questions/53944084
复制相似问题