楼主: shengzhouwang
484 1

[问答] 有偿修改shiny代码 [推广有奖]

  • 3关注
  • 8粉丝

w

已卖:614份资源

副教授

36%

还不是VIP/贵宾

-

威望
0
论坛币
5257 个
通用积分
13.1662
学术水平
18 点
热心指数
33 点
信用等级
10 点
经验
18440 点
帖子
516
精华
0
在线时间
1001 小时
注册时间
2011-12-19
最后登录
2025-10-15

楼主
shengzhouwang 发表于 2024-7-18 14:56:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我用shiny开发了一个考试系统,需要统计考生在作答每一题的鼠标点击次数,主要是我在shiny dashboard里插入了一个html,鼠标点击这里的时候总是无法记录次数,想邀请大神帮忙解决,有偿修改
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Shiny Shin Dashboard Board 考试系统

致力于教育测量改变教育现状

沙发
赵安豆 发表于 2024-7-18 15:04:16
要实现在Shiny应用中记录HTML元素上的鼠标点击次数,我们可以使用JavaScript结合Shiny的事件处理能力。下面我将给出一个基本示例来说明如何实现这一功能。

首先,在`ui.R`文件中插入HTML元素,并使用Shinyjs来激活一个监听器。这里我们将创建一个按钮和一段文本用于显示点击次数:

```R
library(shiny)
library(shinydashboard)

# UI定义
ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    tags$head(tags$script(HTML("
      Shiny.addCustomMessageHandler('clickCount', function() {
        document.getElementById('myButton').addEventListener('click', function(event) {
          var count = document.getElementById('clickCounter');
          if (count.innerHTML === '') {
            count.innerHTML = 1;
          } else {
            count.innerHTML = parseInt(count.innerHTML, 10) + 1;
          }
          Shiny.sendCustomMessage('clickCountUpdate', { clickCount: count.innerHTML });
        });
      });
    "))),
   
    fluidRow(
      column(4,
             actionButton("myButton", "点击我"),
             verbatimTextOutput('clickCounter')
      )
    )
  ),
)
```

在`server.R`文件中,我们需要添加一个处理鼠标点击次数的函数,并通过`observeEvent`监听这个自定义消息。

```R
# Server逻辑
server <- function(input, output, session) {
  
  observeEvent(input$myButton, {
    # 当按钮被点击时执行
    Shiny.addCustomMessageHandler('clickCount', NULL)
    session$sendCustomMessage(type = 'clickCountUpdate', args = list(clickCount = 0))
  })
  
  observeEvent(reactiveValues(clickCounter = 0)$clickCounter, {
    output$clickCounter <- renderText({
      input$clickCountUpdate
      reactiveValues(clickCounter = as.numeric(input$clickCountUpdate))$clickCounter
    })
  })
}

# 运行应用
shinyApp(ui, server)
```

在上面的代码中,我们首先定义了一个按钮和一个用于显示点击次数的文本框。然后我们在UI文件中使用了`Shiny.addCustomMessageHandler`添加了一个JavaScript监听器,每当按钮被点击时,会增加计数器,并通过`Shiny.sendCustomMessage`发送一个自定义消息到服务器端。

在服务器端,我们监听这个自定义消息,并将更新后的点击次数显示在文本框中。这里需要注意的是,实际的实现可能需要根据你的具体需求进行调整,例如如何存储和处理点击计数数据等。

最后,请确保你在代码中正确地引用了`shinyjs`库以启用JavaScript功能。如果上述示例仍然无法满足你的特定需求,或者在尝试时遇到了问题,请详细描述你遇到的错误或需求更具体的细节,以便能够提供更为准确的帮助。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 01:48