R Shiny DataTable如何防止包含超链接的列中的行选择/取消选择

Lia*_*ang 6 datatable r shiny

我正在处理一个带有可点击元素的数据表.该行的一列包含一个超链接.单击超级林时,我不希望触发或管理行点击事件(选择/取消选择).

我在R Shiny上尝试了什么:

function preventDefault(e) {
   e.preventDefault();
   e.stopPropagation();

   return false;
}
Run Code Online (Sandbox Code Playgroud)

DataTable中包含链接的元素:

<a href="#" onclick="preventDefault(event)";>
Run Code Online (Sandbox Code Playgroud)

但什么都没发生.

完整源代码:

library(shiny)
library(DT)
library(dplyr)

ui <- fluidPage(

   # Application title
  DT::dataTableOutput("DTExample")


)

server <- function(input, output) {
  dat <- head(iris)

  dat <- dat %>% mutate(clickme = '<a href="#" 
                     onclick="event.preventDefault(); event.stopPropagation(); alert(event); return false;";
                     >CLICKME</a>')

  output$DTExample<- renderDataTable({
    datatable(dat, escape = FALSE, class = 'cell-border stripe')
  }) 
}

# Run the application 
shinyApp(ui = ui, server = server)
Run Code Online (Sandbox Code Playgroud)

Vic*_*ang 6

问题发生是因为"突出显示操作"绑定到"mousedown",这比"click"事件更早发生.你不能阻止之前发生的事件,对吗?

一个简单的解决方案是使用onmousedown而不是onclick

dat <- dat %>% mutate(clickme = '<a href="#" 
                    onmousedown="event.preventDefault(); event.stopPropagation(); alert(event); return false;";
                    >CLICKME</a>')
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以使用chrome F12来检查事件监听器.您可以删除一些侦听器以查看差异并找到哪个侦听器用于"突出显示" 在此输入图像描述

此外,我发现这是因为当我点击链接但没有发布时,亮点发生了,但没有发生点击.然后我意识到这可能是关键,并使用Chrome检查事件监听器.希望你能理解调试方式!