V8 r包 - 从html下拉菜单中提取文本(rMarkdown文档)

时间:2016-10-14 16:49:30

标签: javascript html r r-markdown

我在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中的错误(替换(expr),envir,enclos):   ReferenceError:未定义文档 调用:... get_str_output - &gt;相同 - &gt; context_eval - &gt; .CALL

拜托,您能否给我一些提示或建议,以便按预期工作。非常感谢提前。

1 个答案:

答案 0 :(得分:0)

如果要分配回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>
```