标签:jquery javascript r shiny html
我使用R 3.0.1和Shiny 0.7.0创建一个带有HTML UI的Shiny网页.
似乎我偶然发现了关于body元素的OnLoad()事件的Shiny中的限制或错误.
由于Shiny没有为多个HTML页面做好准备,正如Joe Cheng here所述,我试图使用jQuery代替在必要时显示和隐藏div.
除非我在OnLoad事件中隐藏div,否则这种方法效果相当不错.在这种情况下,Shiny似乎不再检测到反应性输入组件.
下面你可以看到一个测试用例:
Server.R
library(shiny)
shinyServer(function(input, output) {
output$caption <- renderText({input$myInput})
})
的index.html
<head>
<script src="shared/jquery.js" type="text/javascript"></script>
<script src="shared/shiny.js" type="text/javascript"></script>
<script type="text/javascript" src="js/library.js"></script>
</head>
<body onl oad="initForm();">
<div id="dMenu">
<a href="#" onclick="showFoo();">Show foo div</a>
<br>
<a href="#" onclick="showBar();">Show bar div</a>
</div>
<!-- some random div -->
<div id="foodiv">This is the Foo div</div>
<!-- div with reactive input -->
<div id="bardiv">
This is the Bar div
<br>
<input type="text" id="myInput" class ="shiny-bound-input" name="myInput" autocomplete="off">
<div id="caption" class="shiny-text-output shiny-bound-output"></div>
</div>
</body>
library.js
function showFoo(){
$('#foodiv').show();
$('#bardiv').hide();
}
function showBar(){
$('#foodiv').hide();
$('#bardiv').show();
}
function initForm(){
/*showFoo(); */
}
如果您使用此代码,Shiny将对myInput组件中的更改做出反应并将其写入标题组件.另一方面,如果您在initForm()中注释掉代码,它将停止对您写入myInput的任何内容作出反应.
我用Firefox 23.0.1测试了这个.
有人知道我做错了什么吗?
解决方法:
请参阅Winston的这篇shiny mailing list帖子.
你可以写
shinyServer(function(input, output) {
output$caption <- renderText({input$myInput})
outputOptions(output, 'caption', suspendWhenHidden=FALSE)
})
确保隐藏时元素仍然更新.
标签:jquery,javascript,r,shiny,html 来源: https://codeday.me/bug/20190529/1176517.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。