在ask_confirmation对话框中使用JavaScript函数- Shiny r



我有这个HTML按钮:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="type">
<option value="item0">--Select an Item--</option>
<option value="item1">item1</option>
<option value="item2">item2</option>
<option value="item3">item3</option>
</select>
<select id="size">
<option value="">-- select one -- </option>
</select>

另外我还有这个Java Script函数:

$(document).ready(function () {
$("#type").change(function () {
var val = $(this).val();
if (val == "item1") {
$("#size").html("<option value='test'>item1: test 1</option><option value='test2'>item1: test 2</option>");
} else if (val == "item2") {
$("#size").html("<option value='test'>item2: test 1</option><option value='test2'>item2: test 2</option>");
} else if (val == "item3") {
$("#size").html("<option value='test'>item3: test 1</option><option value='test2'>item3: test 2</option>");
} else if (val == "item0") {
$("#size").html("<option value=''>--select one--</option>");
}
});
});

我想把带有Java脚本函数的按钮放在ask_confirmation对话框中

这是我的ask_confirmation对话框代码:
ask_confirmation(
"hi",
title = "hi",
type = "info", 
width = '50%',
html = TRUE,
text =
div(HTML(" my html code..
")))

有可能吗?

我会尝试以下方法:

将JS代码放入字符串中:

jsfun <- "
var val = $(this).val();
if (val == "item1") {
$("#size").html(
"<option value='test'>item1: test 1</option><option value='test2'>item1: test 2</option>"
);
} else if (val == "item2") {
$("#size").html(
"<option value='test'>item2: test 1</option><option value='test2'>item2: test 2</option>"
);
} else if (val == "item3") {
$("#size").html(
"<option value='test'>item3: test 1</option><option value='test2'>item3: test 2</option>"
);
} else if (val == "item0") {
$("#size").html("<option value=''>--select one--</option>");
}
"

text参数中,输入以下HTML:

tags$div(
tags$select(
tags$option(value = "item0", "Select an item"),
tags$option(value = "item1"),
tags$option(value = "item2"),
tags$option(value = "item3"),
onchange = jsfun
),
tags$select(
id = "size",
tags$option(value = "", "select one")
)
)

jsfun <- "
var val = $(this).val();
if (val == "item1") {
$("#size").html(
"<option value='test'>item1: test 1</option><option value='test2'>item1: test 2</option>"
);
} else if (val == "item2") {
$("#size").html(
"<option value='test'>item2: test 1</option><option value='test2'>item2: test 2</option>"
);
} else if (val == "item3") {
$("#size").html(
"<option value='test'>item3: test 1</option><option value='test2'>item3: test 2</option>"
);
} else if (val == "item0") {
$("#size").html("<option value=''>--select one--</option>");
}
"
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
actionButton("go", "Go")
)
server <- function(input, output, session) {
observeEvent(input$go, {
ask_confirmation(
"hi", 
text = tags$div(
tags$select(
tags$option(value = "item0", "Select an item"),
tags$option(value = "item1", "item1"),
tags$option(value = "item2", "item2"),
tags$option(value = "item3", "item3"),
onchange = jsfun
),
tags$select(
id = "size",
tags$option(value = "", "select one")
)
),
html = TRUE
)

})
}
shinyApp(ui, server)

最新更新