diff --git a/packages/dropdown/__tests__/dropdown.spec.tsx b/packages/dropdown/__tests__/dropdown.spec.tsx
index 1ea508e5d8..bda1789e2e 100644
--- a/packages/dropdown/__tests__/dropdown.spec.tsx
+++ b/packages/dropdown/__tests__/dropdown.spec.tsx
@@ -9,6 +9,7 @@ const TIMEOUT = 250
const MOUSE_ENTER_EVENT = 'mouseenter'
const MOUSE_LEAVE_EVENT = 'mouseleave'
const CLICK = 'click'
+const CONTEXTMENU = 'contextmenu'
const _mount = (template: string, data, otherObj?) => mount({
components: {
@@ -136,6 +137,37 @@ describe('Dropdown', () => {
expect(content.visible).toBe(true)
})
+ test('trigger contextmenu', async () => {
+ const wrapper = _mount(
+ `
+
+
+ dropdown
+
+
+
+ Apple
+ Orange
+ Cherry
+ Peach
+ Pear
+
+
+
+ `,
+ () => ({
+ myCommandObject: { name: 'CommandC' },
+ name: '',
+ }),
+ )
+ const content = wrapper.findComponent({ ref: 'b' }).vm as any
+ const triggerElm = wrapper.find('.el-dropdown-link')
+ expect(content.visible).toBe(false)
+ await triggerElm.trigger(CONTEXTMENU)
+ await sleep(TIMEOUT)
+ expect(content.visible).toBe(true)
+ })
+
test('split button', async () => {
const wrapper = _mount(
`
diff --git a/packages/dropdown/src/dropdown-menu.vue b/packages/dropdown/src/dropdown-menu.vue
index 5b4cd51123..2ca0b6e18d 100644
--- a/packages/dropdown/src/dropdown-menu.vue
+++ b/packages/dropdown/src/dropdown-menu.vue
@@ -27,7 +27,7 @@ export default defineComponent({
elDropdown.show?.()
}
function hide() {
- if (elDropdown.trigger.value === 'click') return
+ if (['click', 'contextmenu'].includes(elDropdown.trigger.value)) return
_hide()
}
function _hide() {
diff --git a/packages/dropdown/src/dropdown.vue b/packages/dropdown/src/dropdown.vue
index 1fc96f7fc8..137d7fd23f 100644
--- a/packages/dropdown/src/dropdown.vue
+++ b/packages/dropdown/src/dropdown.vue
@@ -156,7 +156,7 @@ export default defineComponent({
() => {
visible.value = true
},
- props.trigger === 'click' ? 0 : props.showTimeout,
+ ['click', 'contextmenu'].includes(props.trigger) ? 0 : props.showTimeout,
)
}
@@ -171,7 +171,7 @@ export default defineComponent({
() => {
visible.value = false
},
- props.trigger === 'click' ? 0 : props.hideTimeout,
+ ['click', 'contextmenu'].includes(props.trigger) ? 0 : props.hideTimeout,
)
}
@@ -226,6 +226,11 @@ export default defineComponent({
on(triggerElm.value, 'mouseleave', hide)
} else if (props.trigger === 'click') {
on(triggerElm.value, 'click', handleClick)
+ } else if (props.trigger === 'contextmenu') {
+ on(triggerElm.value, 'contextmenu', e => {
+ e.preventDefault()
+ handleClick()
+ })
}
Object.assign(_instance, {
diff --git a/website/docs/en-US/dropdown.md b/website/docs/en-US/dropdown.md
index 16276d52b7..74ccec8012 100644
--- a/website/docs/en-US/dropdown.md
+++ b/website/docs/en-US/dropdown.md
@@ -18,7 +18,7 @@ Hover on the dropdown menu to unfold it for more actions.
Action 3
Action 4
Action 5
-
+
@@ -101,7 +101,7 @@ Click the triggering element or hover on it.
```html
-
+
hover to trigger
@@ -118,7 +118,7 @@ Click the triggering element or hover on it.
-
+
click to trigger
@@ -135,6 +135,23 @@ Click the triggering element or hover on it.
+
+ right click to trigger
+
+
+ Dropdown List
+
+
+
+ Action 1
+ Action 2
+ Action 3
+ Action 4
+ Action 5
+
+
+
+