Javascript 为什么';tr是否接受jQuery设置的文本输入?

Javascript 为什么';tr是否接受jQuery设置的文本输入?,javascript,jquery,html,r,shiny,Javascript,Jquery,Html,R,Shiny,我正试图在没有ui.R文件的情况下构建一个R闪亮的应用程序,差点让它正常工作,但却在最后的关卡上绊倒了。以下是该问题的最简单工作演示: html文件定义了两个按钮,一个名为“RAND”,由jQuery控制,另一个名为“ADD1”,由R控制。我还有两个名为“temp”和“out”的文本框 此虚拟程序的目标是“RAND”将随机数加载到“temp”中,“ADD1”将“temp”中存储的值增加1 “RAND”按钮工作正常,但“ADD1”按钮产生“NA”。有趣的是,如果我手动修改“temp”值,然后再次单

我正试图在没有ui.R文件的情况下构建一个R闪亮的应用程序,差点让它正常工作,但却在最后的关卡上绊倒了。以下是该问题的最简单工作演示:

  • html文件定义了两个按钮,一个名为“RAND”,由jQuery控制,另一个名为“ADD1”,由R控制。我还有两个名为“temp”和“out”的文本框
  • 此虚拟程序的目标是“RAND”将随机数加载到“temp”中,“ADD1”将“temp”中存储的值增加1
  • “RAND”按钮工作正常,但“ADD1”按钮产生“NA”。有趣的是,如果我手动修改“temp”值,然后再次单击“ADD1”,它确实会生成正确的值
  • 我的问题是:为什么程序会这样做?我如何才能使“ADD1”工作而不必手动重新键入“temp”的内容
  • 这是我的index.html:

    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="jquery-ui.css"/>
    <script src="jquery.js" type="text/javascript"></script>
    <script src="jquery-ui.js" type="text/javascript"></script>
    <script src="test.js" type="text/javascript"></script>
    <script src="shiny.js" type="text/javascript"></script>
    </head>
    <body>
    <div id="RAND" name="RAND">RAND</div>
    <div id="ADD1" name="ADD1" class="action-button">+1</div>
    <p></p>
    <div class="form-group shiny-input-container">
    <input id="temp" name="temp" type="text" class="form-control"/>
    </div>
    <p></p>
    <div id="out" class="shiny-text-output"></div>
    </body>
    </html>
    
    多亏了他的建议,我终于回答了自己的问题:

    index.html保持不变

    server.R变为:

    library(shiny)
    shinyServer(function(input,output,session){ 
        observe({
            input$randval
        })
        observeEvent(input$ADD1, {
            output$out <- renderText({ as.numeric(input$randval) + 1 })
        })
    })
    

    请注意,存储在$(#temp)中的值实际上不用于任何用途,可以删除。我只是把它留在代码中,以便与我最初的问题公式进行比较。

    我相信我以前读过类似的问题。基本上,shiny输入无法识别Javascript修改的值。是否有其他方法将Javascript生成的动态内容传递给Siny/R?shiny有一个未记录的功能,允许您从JS直接向shiny发送数据:
    $(function(){
        $("#RAND").button()
        $("#RAND").click(function() {
            $("#temp").val(Math.random());
        });
        $("#ADD1").button()
    });
    
    library(shiny)
    shinyServer(function(input,output,session){ 
        observe({
            input$randval
        })
        observeEvent(input$ADD1, {
            output$out <- renderText({ as.numeric(input$randval) + 1 })
        })
    })
    
    $(function(){
        $("#RAND").button()
        $("#RAND").click(function() {
            val = Math.random();
            $("#temp").val(val);
            Shiny.onInputChange("randval",val);
        });
        $("#ADD1").button()
    });