Skip to content

Commit 812277d

Browse files
authored
Fix onMouseEnter is fired on disabled buttons (#17675)
1 parent 2078aa9 commit 812277d

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

packages/legacy-events/EventPluginHub.js

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ function shouldPreventMouseEvent(name, type, props) {
4545
case 'onMouseMoveCapture':
4646
case 'onMouseUp':
4747
case 'onMouseUpCapture':
48+
case 'onMouseEnter':
4849
return !!(props.disabled && isInteractive(type));
4950
default:
5051
return false;

packages/react-dom/src/__tests__/ReactBrowserEventEmitter-test.internal.js

+15
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const ON_MOUSE_ENTER_KEY = 'onMouseEnter';
3737
let GRANDPARENT;
3838
let PARENT;
3939
let CHILD;
40+
let BUTTON;
4041

4142
let getListener;
4243
let putListener;
@@ -71,6 +72,7 @@ describe('ReactBrowserEventEmitter', () => {
7172
let GRANDPARENT_PROPS = {};
7273
let PARENT_PROPS = {};
7374
let CHILD_PROPS = {};
75+
let BUTTON_PROPS = {};
7476

7577
function Child(props) {
7678
return <div ref={c => (CHILD = c)} {...props} />;
@@ -87,6 +89,7 @@ describe('ReactBrowserEventEmitter', () => {
8789
<div ref={c => (GRANDPARENT = c)} {...GRANDPARENT_PROPS}>
8890
<div ref={c => (PARENT = c)} {...PARENT_PROPS}>
8991
<ChildWrapper {...CHILD_PROPS} />
92+
<button disabled={true} ref={c => (BUTTON = c)} {...BUTTON_PROPS} />
9093
</div>
9194
</div>,
9295
container,
@@ -110,6 +113,9 @@ describe('ReactBrowserEventEmitter', () => {
110113
case GRANDPARENT:
111114
GRANDPARENT_PROPS[eventName] = listener;
112115
break;
116+
case BUTTON:
117+
BUTTON_PROPS[eventName] = listener;
118+
break;
113119
}
114120
// Rerender with new event listeners
115121
renderTree();
@@ -125,6 +131,9 @@ describe('ReactBrowserEventEmitter', () => {
125131
case GRANDPARENT:
126132
GRANDPARENT_PROPS = {};
127133
break;
134+
case BUTTON:
135+
BUTTON_PROPS = {};
136+
break;
128137
}
129138
renderTree();
130139
};
@@ -149,6 +158,12 @@ describe('ReactBrowserEventEmitter', () => {
149158
expect(listener).toEqual(LISTENER);
150159
});
151160

161+
it('should not retrieve listeners on a disabled interactive element', () => {
162+
putListener(BUTTON, ON_MOUSE_ENTER_KEY, recordID.bind(null, BUTTON));
163+
const listener = getListener(BUTTON, ON_MOUSE_ENTER_KEY);
164+
expect(listener).toBe(null);
165+
});
166+
152167
it('should clear all handlers when asked to', () => {
153168
registerSimpleTestHandler();
154169
deleteAllListeners(CHILD);

0 commit comments

Comments
 (0)