【问题标题】:Find element under click causing blur在点击下查​​找元素导致模糊
【发布时间】:2016-07-12 08:27:51
【问题描述】:

有什么方法可以找出导致点击模糊的元素甚至被改掉了吗?

我需要将 ui-select 的值设置为用户在下拉菜单之外单击时输入的内容。但是当他点击下拉项目时,应该丢弃输入并选择项目。所以我应该了解当用户在 ui-select 的输入之外单击时鼠标在哪里。我试过了

element.find('input').on('blur', function (e) {
       e.target  
  ...
 });

但目标总是指向

input.form-control.ui-select-search.ng-valid.ng-touched.ng-dirty.ng-valid-parse

Get element currently under mouse without using mouse events

总是找到突出显示的下拉项目广告

Determine which element the mouse pointer is on top of in Javascript

不起作用,因为我不能使用任何 DOM X/Y 属性。

有什么想法吗?

ps:没有 jquery。

【问题讨论】:

  • 请尝试使用jsbin、jsfiddle复制场景...
  • 你已经用 angularjs 标记了这个,也许值得看看 ng-blur? docs.angularjs.org/api/ng/directive/ngBlur
  • 在输入的focus 上,在根document 元素上设置一个click 事件监听器,它首先标识收到点击的元素(event.target,类似于您上面的使用),然后for/while 循环遍历event.target 及其所有父对象(一直向上到DOM 树),寻找[“原始”焦点<input>] 的匹配项。如果element.target 和任何父/祖先都不匹配,则您找到了该元素。无论您是否返回匹配项,您都可能希望在处理程序完成后删除该 eventListener。
  • 谢谢伊藤皮萨罗!这可能是要走的路 - 我正在考虑向下拉项添加单击(或者可能是更好的 mousedown)侦听器(但它们是动态添加到 dom 的)并且忘记了我可以将它添加到父 elt 并使用 event.target。
  • 没问题!我真的应该将其作为答案提交,以便其他人更容易找到。我现在正在修复它……

标签: javascript html angularjs ui-select


【解决方案1】:

在输入的焦点上,在根文档元素上设置clickeventListener

  1. 标识收到点击的元素(event.target,类似于你上面的使用)
  2. for/while 循环遍历 event.target 及其所有父节点(一直向上 DOM 树),寻找匹配[“原始”焦点 <input>]

如果element.target 和任何父/祖先都不匹配,则您找到了该元素。无论您是否返回匹配项,您都希望在处理程序完成后删除该 eventListener

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多