d3.event.shiftKey вызывает сбой с Force-Directed Layout

Я пытаюсь создать действие Shift+Click в силовом макете со следующим кодом, примененным к фигурам узлов:

.on("click",function(){
        if(d3.event.shiftKey){
                //do something
        }
});

Код, как правило, работает правильно, но иногда приводит к сбою браузера (крах Chrome и Safari). Похоже, что сбой происходит после следующей последовательности:

  • Нажмите и перетащите курсор в любое место за пределами узла (чтобы текстовый курсор был открыт)
  • Удерживая нажатой клавишу Shift, удерживая курсор за пределами узла (по-прежнему отображается текстовый курсор)
  • Щелкните узел

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

Возможно, D3 мешает какой-то встроенной функции сдвига? Например, клавиша alt отлично работает с моим кодом выше.

Спасибо!


person interpolack    schedule 06.09.2013    source источник
comment
Не могли бы вы опубликовать скрипку или блоки?   -  person Adam Pearce    schedule 06.09.2013
comment
Это звучит как ошибка для меня. Вы проверили соответствующие трекеры ошибок?   -  person Lars Kotthoff    schedule 06.09.2013
comment
Из этой существующей скрипки (jsfiddle.net/zuzzy/dFd3H/2) я обнаружил, что проблема не только в моем событии Shift+Click — похоже, это происходит со всеми макетами с принудительным управлением. Удерживайте Shift во время следующего: щелкните пустое место, щелкните узел - браузер вылетает.   -  person interpolack    schedule 06.09.2013


Ответы (1)


Мы столкнулись с похожей ситуацией, и похоже, что это ошибка Chrome: https://bugs.webkit.org/show_bug.cgi?id=114745

Возможно, поведение по умолчанию в webkit, когда Shift-щелчок выбирает весь текст до текущей позиции курсора, является механизмом сбоя.

Мы еще не потратили время на отслеживание особенностей d3, но, как следует из отчета об ошибке, на данный момент можно обойти это с помощью вызова «размытия» для любых ранее сфокусированных элементов (см. отчет об ошибке).

person Rocketman    schedule 11.09.2013