【问题标题】:V8 r package - extract text from html drop down menu (rMarkdown document)V8 r 包 - 从 html 下拉菜单中提取文本(rMarkdown 文档)
【发布时间】:2016-10-17 20:37:15
【问题描述】:

我在 rMarkdown 文档中实现了 html 下拉菜单的简单实现,我正在使用 V8 r 包来使用 javascript 来做到这一点。

---
title: "js + plotly"
author: ""
date: "`r Sys.Date()`"
output:
  ioslides_presentation:
    widescreen: true
    smaller: false
---

## Zero slide

<div>
<select name="newSkill" id="newSkill">
<option value="1">A skill</option>
<option value="2">Another skill</option>
<option value="3">Yet another skill</option>
</select>
</div>


```{r}
library(V8)

ct <- v8()
ct$assign("getFromDrop", JS("(function(){var skillsSelect = document.getElementById('newSkill'); var selectedText = skillsSelect.options[skillsSelect.selectedIndex].text; return(selectedText);})"))
ct$assign("bar", JS("getFromDrop()"))
output <- ct$get("bar")

print(output)

```

我不知道我做错了什么,但它不起作用。我收到以下错误消息:

eval(substitute(expr), envir, enclos) 中的错误: ReferenceError:文档未定义 调用:... get_str_output -> 相同 -> context_eval -> .Call

请你给我一个提示或建议,要改变什么才能按预期工作。非常感谢。

【问题讨论】:

  • 我不确定你想做什么工作。 V8 不会从浏览器会话中读取。它实例化了自己的 V8 环境。
  • 我需要从下拉菜单中的选定项目中提取文本并将其发送到 r 变量。
  • 有什么办法可以做到吗?
  • 切换到使用 Shiny
  • 我想避免闪亮,我只需要使用纯 html 和 javascript。

标签: javascript html r r-markdown


【解决方案1】:

如果您想分配回R 变量,您将需要Shiny 或类似的东西,例如fieryjug 或您自己的自定义websocket 实现。正如@hrbrmstr 所说,V8 旨在独立运行,并且不了解在 RStudio 查看器或您的浏览器中实例化的浏览器环境。

如果您不需要分配回 R 变量,您可以执行以下操作。

---
title: "js + plotly"
author: ""
date: "`r Sys.Date()`"
output:
  ioslides_presentation:
  widescreen: true
  smaller: false
---

## Zero slide

<div>
<select name="newSkill" id="newSkill" onchange="getFromDrop()">
<option value="1">A skill</option>
<option value="2">Another skill</option>
<option value="3">Yet another skill</option>
</select>
</div>


<script>
  function getFromDrop{
    var skillsSelect = document.getElementById('newSkill');
    var selectedText = skillsSelect.options[skillsSelect.selectedIndex].text;
    return(selectedText);
  }
</script>
```

【讨论】:

  • 我需要分配回一个 R 变量。
  • 如果您需要将 ui 和分配回 R,那么您将被限制为 Shiny 或我提到的其他替代方案之一。
猜你喜欢
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2021-10-22
  • 2011-10-07
  • 1970-01-01
  • 2023-03-25
  • 2014-12-23
相关资源
最近更新 更多