You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shiny自定义可悬停下拉菜单获取选中选项值为空异常排查

问题原因
  • 事件绑定逻辑错误:原有代码将点击事件绑定到下拉菜单的父容器#btn3上,取值时也取的是父容器的整体文本,无法捕获单个被点击选项的内容
  • 未阻止<a>标签的默认跳转行为,可能引发页面不必要的锚点跳动
修复方案

仅需要修改代码中的JavaScript逻辑部分,监听下拉选项(即#btn3下的<a>标签)的点击事件,取当前点击元素的文本即可,完整可运行代码如下:

library(shiny)

jscode <- '
$("#btn3 a").on("click", function(e){
  // 阻止a标签默认跳转行为
  e.preventDefault();
  // 取当前点击的选项文本传给Shiny
  Shiny.setInputValue("mydata", $(this).text());
})
'

ui <- fluidPage(
  HTML( 
    '<style>
.dropbtn {
  background-color: #04AA6D;
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
}

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f1f1f1;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}

.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-content a:hover {background-color: #ddd;}

.dropdown:hover .dropdown-content {display: block;}

.dropdown:hover .dropbtn {background-color: #3e8e41;}
</style>

<div class="dropdown" id = "btn1">
  <button class="dropbtn" id = "btn2">Dropdown</button>
  <div id = "btn3" class="dropdown-content">
    <a href="#">Link 1</a>
    <a href="#">Link 2</a>
    <a href="#">Link 3</a>
  </div>
</div>
'),
  singleton(tags$script(HTML(jscode)))
)

server = function(input, output, session) {
  observeEvent(input$mydata, {
    print(paste("data is: ", input$mydata))
  })
}
runApp(list(ui = ui, server = server))

运行后点击任意下拉选项,控制台就会打印对应选中的内容。

内容的提问来源于stack exchange,提问作者volfi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:42:01