18

有谁知道与explicitOriginalTarget 事件参数等效的跨浏览器?这个参数是 Mozilla 特定的,它给了我导致模糊的元素。假设我的页面上有一个文本输入和一个链接。文本输入具有焦点。如果我点击链接,文本输入的 blur 事件通过 explicitOriginalTarget 参数为我提供 Firefox 中的链接元素。

我正在扩展 Autocompleter.Base 的 onBlur 方法,以便在搜索字段失去对给定元素的焦点时不隐藏搜索结果。默认情况下,如果搜索字段失去对任何元素的焦点,onBlur 方法会隐藏。

Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap(
function(origfunc, ev) {
    var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode: ev.explicitOriginalTarget); // FIX: This works only in firefox because of event's explicitOriginalTarget property
    var callOriginalFunction = true;
    for (i = 0; i < obj.options.validEventElements.length; i++) {
        if ($(obj.options.validEventElements[i])) {
            if (newTargetElement.descendantOf($(obj.options.validEventElements[i])) == true || newTargetElement == $(obj.options.validEventElements[i])) {
                callOriginalFunction = false;
                break;
            }
        }
    }
    if (callOriginalFunction) {
        return origFunc(ev);
    }
}
);


new Ajax.Autocompleter("search-field", "search-results", 'getresults.php', { validEventElements: ['search-field','result-count'] });

谢谢。

4

6 回答 6

9

除了基于 Gecko 的浏览器之外,在任何其他浏览器中都没有与 explicitOriginalTarget 等效的功能。在 Gecko 中,这是一个内部属性,不应由应用程序开发人员(可能由 XBL 绑定编写者)使用。

于 2008-10-07T20:17:34.717 回答
4

2015 更新...您可以在 Chrome 上使用 event.relatedTarget。这么基本的东西,希望其他浏览器也能效仿……

于 2015-02-22T21:02:50.007 回答
3

Mozilla 的 .explicitOriginalTarget 在 IE 中的粗略等价物是 document.activeElement。我说粗略的等效是因为它有时会根据您的情况在 DOM 节点树中返回稍微不同的级别,但它仍然是一个有用的工具。不幸的是,我仍在寻找 Google Chrome 的等价物。

于 2010-02-11T18:43:58.247 回答
3

IEsrcElement不包含与 FF 相同的元素explicitOriginalTarget。很容易看出这一点:如果您有一个带有操作的按钮字段onClick和一个带有操作的文本字段onChange,请更改文本字段并将光标直接移动到按钮并单击它。此时 IEsrcElement将成为文本字段,但IE 将成为explicitOriginalTarget按钮字段。对于 IE,可以从event.xevent.y属性中获取鼠标点击的 x,y 坐标。

不幸的是,Chrome 浏览器既不提供explicitOriginalTarget点击坐标,也不提供鼠标坐标。您可以自行决定onChange事件是从哪里触发的。为此,明智地使用mousemovemouseout事件可以提供鼠标跟踪,然后可以在onChange处理程序中对其进行检查。

于 2012-05-05T00:43:12.243 回答
1

看起来它更适合扩展编写者而不是网页设计......

我会观察两个目标(或潜在目标)上的模糊/聚焦事件并分享他们的信息。
实际上,确切的实现可能取决于目的。

于 2008-10-07T19:35:36.363 回答
0

对于 IE,您可以使用srcElement, 并强制它。

if( !selectTag.explicitOriginalTarget )
    selectTag.explicitOriginalTarget = selectTag.srcElement;
于 2012-03-07T18:46:48.533 回答