diff --git a/components/menu/src/Menu.tsx b/components/menu/src/Menu.tsx
index 1b54e763b..b8f5fdffc 100644
--- a/components/menu/src/Menu.tsx
+++ b/components/menu/src/Menu.tsx
@@ -320,6 +320,7 @@ export default defineComponent({
registerMenuInfo,
unRegisterMenuInfo,
selectedSubMenuEventKeys,
+ isRootMenu: true,
});
return () => {
return
;
diff --git a/components/menu/src/PopupTrigger.tsx b/components/menu/src/PopupTrigger.tsx
index 7298952a8..d1f326671 100644
--- a/components/menu/src/PopupTrigger.tsx
+++ b/components/menu/src/PopupTrigger.tsx
@@ -36,6 +36,7 @@ export default defineComponent({
subMenuCloseDelay,
builtinPlacements,
triggerSubMenuAction,
+ isRootMenu,
} = useInjectMenu();
const placement = computed(() =>
@@ -77,7 +78,9 @@ export default defineComponent({
popupClassName,
)}
stretch={mode === 'horizontal' ? 'minWidth' : null}
- getPopupContainer={getPopupContainer.value}
+ getPopupContainer={
+ isRootMenu ? getPopupContainer.value : triggerNode => triggerNode.parentNode
+ }
builtinPlacements={placement.value}
popupPlacement={popupPlacement.value}
popupVisible={innerVisible.value}
diff --git a/components/menu/src/SubMenu.tsx b/components/menu/src/SubMenu.tsx
index ac523bfe1..9be235df6 100644
--- a/components/menu/src/SubMenu.tsx
+++ b/components/menu/src/SubMenu.tsx
@@ -31,7 +31,7 @@ export default defineComponent({
internalPopupClose: Boolean,
},
slots: ['icon', 'title'],
- emits: ['titleClick', 'titleMouseenter', 'titleMouseleave'],
+ emits: ['titleClick', 'mouseenter', 'mouseleave'],
inheritAttrs: false,
setup(props, { slots, attrs, emit }) {
useProvideFirstLevel(false);
@@ -130,13 +130,13 @@ export default defineComponent({
const onMouseEnter = (event: MouseEvent) => {
if (!mergedDisabled.value) {
changeActiveKeys(keysPath.value);
- emit('titleMouseenter', event);
+ emit('mouseenter', event);
}
};
const onMouseLeave = (event: MouseEvent) => {
if (!mergedDisabled.value) {
changeActiveKeys([]);
- emit('titleMouseleave', event);
+ emit('mouseleave', event);
}
};
@@ -245,7 +245,7 @@ export default defineComponent({
onVisibleChange={onPopupVisibleChange}
v-slots={{
popup: ({ visible }) => (
-
+