diff --git a/packages/popover/src/main.vue b/packages/popover/src/main.vue
index 8b565ea2b..c856c40f4 100644
--- a/packages/popover/src/main.vue
+++ b/packages/popover/src/main.vue
@@ -113,24 +113,7 @@ export default {
       on(reference, 'mouseleave', this.handleMouseLeave);
       on(popper, 'mouseleave', this.handleMouseLeave);
     } else if (this.trigger === 'focus') {
-      let found = false;
-
-      if ([].slice.call(reference.children).length) {
-        const children = reference.childNodes;
-        const len = children.length;
-        for (let i = 0; i < len; i++) {
-          if (children[i].nodeName === 'INPUT' ||
-              children[i].nodeName === 'TEXTAREA') {
-            on(children[i], 'focusin', this.doShow);
-            on(children[i], 'focusout', this.doClose);
-            found = true;
-            break;
-          }
-        }
-      }
-      if (found) return;
-      if (reference.nodeName === 'INPUT' ||
-        reference.nodeName === 'TEXTAREA') {
+      if (reference.querySelector('input, textarea')) {
         on(reference, 'focusin', this.doShow);
         on(reference, 'focusout', this.doClose);
       } else {
@@ -214,6 +197,8 @@ export default {
     off(reference, 'mousedown', this.doShow);
     off(reference, 'focusin', this.doShow);
     off(reference, 'focusout', this.doClose);
+    off(reference, 'mousedown', this.doShow);
+    off(reference, 'mouseup', this.doClose);
     off(reference, 'mouseleave', this.handleMouseLeave);
     off(reference, 'mouseenter', this.handleMouseEnter);
     off(document, 'click', this.handleDocumentClick);