R Shiny DataTable Как предотвратить выбор / отмену выбора строки в столбцах, содержащих гиперссылки - PullRequest
0 голосов
/ 03 июля 2018

Я имею дело с датируемым элементом. Столбец строки содержит гиперссылку. При щелчке гиперлина я не хочу, чтобы событие щелчка строки запускалось или управлялось (для выбора / отмены выбора).

Что я пробовал на 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)

1 Ответ

0 голосов
/ 03 июля 2018

Проблема возникла из-за того, что «действие выделения» привязано к «mousedown», что происходит раньше, чем событие «щелчка». Вы не можете предотвратить событие, произошедшее раньше, верно?

Одним из простых решений является использование onmousedown вместо onclick

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

Кстати, вы можете использовать chrome F12 для проверки прослушивателя событий. Вы можете удалить слушателя, чтобы увидеть разницу и найти, какой слушатель предназначен для «выделения» enter image description here

Кроме того, я нашел это, потому что, когда я нажимаю ссылку, но не отпускаю, выделение происходит, но щелчок не происходит. Затем я понимаю, что это может быть ключом, и проверяю прослушиватель событий с помощью Chrome. Я надеюсь, что вы можете понять способ отладки!

...