我正在处理带有clickable元素的数据表。该行的一列包含一个超链接。单击hyperlin后,我不希望触发或管理行单击事件(选择/取消选择)。
我在R Shiny上尝试过的方法:
function preventDefault(e) {
e.preventDefault();
e.stopPropagation();
return false;
}
DataTable中包含链接的元素:
<a href="#" onclick="preventDefault(event)";>
但是什么也没发生。
完整的源代码:
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)
答案 0 :(得分:5)
发生此问题是因为“突出显示动作”绑定到“鼠标按下”,这比“单击”事件更早发生。您无法阻止之前发生的事件,对吧?
一种简单的解决方案是使用onmousedown
而不是onclick
dat <- dat %>% mutate(clickme = '<a href="#"
onmousedown="event.preventDefault(); event.stopPropagation(); alert(event); return false;";
>CLICKME</a>')
顺便说一句,您可以使用chrome F12检查事件监听器。您可以删除一些侦听器以查看其区别,并找到哪个侦听器用于“突出显示”
我也发现了这一点,因为当我单击链接但未释放时,突出显示发生了,但单击没有发生。然后我意识到这可能是关键,并使用Chrome检查事件监听器。希望您能理解调试方式!