Я знаю, что это кажется простым, и первым побуждением будет предложить что-то вроде preventDefault
в событии mousedown. Это не то, чем является этот вопрос.
В React я просто хочу получить input
, когда Left Clicked
получает свой фокус как обычно, а когда Right Clicked
не получает фокус.
Я не могу найти никакой комбинации обработчиков событий или манипуляций с событиями, которая позволила бы это (по крайней мере, в chrome). У меня возникает соблазн поместить обработчики событий за пределы React DOM и провести операцию с отключением на более высоком уровне в фазе захвата до того, как в нее вступит реакция, но я просто надеюсь, что что-то упустил, и кто-то увидит что-то очевидное, чего мне не хватает .
Вот различные комбинации «всего», что я бросил в него. Syntheti c стандартное предотвращение событий, предотвращение nativeEvent, каждая вариация захвата и пузырьковая фаза и т. Д. c. Событие со всеми описанными ниже обработчиками событий. Я могу запретить фокусировку щелчка левой кнопкой мыши, но щелчок правой кнопкой мыши устанавливает фокус на входе.
//React v16.12.0
function killEvent (e: React.SomeEvent<HTMLInputElement>): void {
e.nativeEvent.stopImmediatePropagation();
e.nativeEvent.preventDefault();
//[Neither above nor below seems to work]
e.preventDefault();
e.stopPropagation();
}
<input
onContextMenuCapture={killEvent}
onContextMenu={killEvent}
onClick={killEvent}
onClickCapture={killEvent}
onAuxClick={killEvent}
onAuxClickCapture={killEvent}
onPointerDown={killEvent}
onPointerDownCapture={killEvent}
onMouseDownCapture={killEvent}
onMouseDown={killEvent}
onFocusCapture={killEvent}
onFocus={killEvent}
/>