Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果使用attachEvent添加了onfocus事件处理程序,如何访问它? 背景:_Javascript_Events_Vba_Handler - Fatal编程技术网

Javascript 如果使用attachEvent添加了onfocus事件处理程序,如何访问它? 背景:

Javascript 如果使用attachEvent添加了onfocus事件处理程序,如何访问它? 背景:,javascript,events,vba,handler,Javascript,Events,Vba,Handler,我正在编写一个脚本(如果需要的话,用VBA)将数据输入到基于web的系统中。一些系统的验证只在字段被聚焦时运行,因此我一直在VBA中的字段上调用.Focus,以强制它运行。但这偷走了全系统的焦点;如果在作业运行时我正在做其他事情,那就相当烦人了 我希望在不窃取焦点的情况下触发验证。因此,我试图直接调用注册到输入字段的任何事件处理程序 问题: web应用程序中的所有事件处理程序都添加了元素。attachEvent(),这意味着未设置onfocus和onblur属性(我相信这些属性是我想要的)。 有

我正在编写一个脚本(如果需要的话,用VBA)将数据输入到基于web的系统中。一些系统的验证只在字段被聚焦时运行,因此我一直在VBA中的字段上调用
.Focus
,以强制它运行。但这偷走了全系统的焦点;如果在作业运行时我正在做其他事情,那就相当烦人了

我希望在不窃取焦点的情况下触发验证。因此,我试图直接调用注册到输入字段的任何事件处理程序

问题: web应用程序中的所有事件处理程序都添加了
元素。attachEvent()
,这意味着未设置
onfocus
onblur
属性(我相信这些属性是我想要的)。
有没有办法在不使用更多邪恶黑客的情况下检索处理程序?

或者,有没有更好的方法来实现这一点而不必找到事件处理程序?我对JavaScript非常陌生,因此很容易遗漏一些东西



编辑:焦点可能被VBA代码窃取还有其他原因吗?我找不到对
.Focus
的任何其他引用,甚至找不到AutoIt的
WinActivate
,但即使有了这里的建议,问题仍然存在。

除了整个VBA部分,您似乎有对
元素的引用,因此您可以尝试调用
元素.Focus()
元素.blur())
分别触发聚焦和模糊事件。

看看这个

此函数应为您触发事件:

function fireEvent(element,event){
    if (document.createEventObject){
        // dispatch for IE
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        // dispatch for firefox + others
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); // event type,bubbling,cancelable
        return !element.dispatchEvent(evt);
    }
}

您是否有权访问正在与之交互的应用程序(以便能够添加此功能)?

但是
.focus
似乎抓住了系统范围内的焦点,这正是我试图避免的。我只是说我尝试过,它做到了。除非是我做了别的什么导致了它,但是我没有看到对大写字母
Focus
@mmyers:hmm的任何其他调用。也许我对这个问题的VBA部分不够熟悉。如果我在此页面上调用
setTimeout(function(){('[name=q]')[0].focus()},2000)
,然后切换到其他应用程序(如Powerpoint)并等待2秒钟,该页面不会再次窃取焦点。我也不熟悉VBA,但我再次搜索,仍然找不到任何可以窃取焦点的内容。我希望这个问题不是与真正的问题完全无关。不,但我可以从VBA中做到这一点。我现在就去试一试。谢谢此外,这是一个保证使用IE的内部应用程序,因此更容易实现。