Если обработчик события onfocus добавлен с attachEvent, как я могу получить к нему доступ? - PullRequest
0 голосов
/ 15 декабря 2009

Справочная информация:

Я пишу скрипт (в VBA, если это имеет значение) для ввода данных в веб-систему. Некоторая проверка системы выполняется только тогда, когда поле сфокусировано, поэтому я вызывал .Focus для полей в VBA, чтобы заставить его работать. Но это крадет системную направленность; довольно раздражает, если я делаю что-то еще, пока работа выполняется.

Я хочу, чтобы проверка запускалась без кражи фокуса. Поэтому я пытаюсь напрямую вызвать любой обработчик события, зарегистрированный в поле ввода.

Проблема:

Все обработчики событий в веб-приложении добавляются с element.attachEvent(), что означает, что свойства onfocus и onblur (которые, я считаю, те, которые мне нужны) не установлены.
Есть ли способ получить обработчики, не прибегая к еще большему количеству злых хаков?

В качестве альтернативы, есть ли лучший способ сделать это без необходимости искать обработчики событий? Я довольно новичок в JavaScript, так что я могу что-то упустить.


Редактировать: Есть ли какая-либо другая причина, по которой фокус может быть украден кодом VBA? Я не могу найти никаких других ссылок на .Focus или даже на AutoIt WinActivate, но даже с предложениями здесь, проблема все еще возникает.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2009

Взгляните на этот пост .

Эта функция должна запустить событие для вас:

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);
    }
}

У вас есть доступ к приложению, с которым вы взаимодействуете (чтобы иметь возможность добавить эту функцию)?

0 голосов
/ 15 декабря 2009

За исключением всей части VBA, у вас есть ссылка на element, поэтому вы можете попробовать вызвать element.focus() или element.blur(), чтобы вызвать события фокуса и размытия соответственно.

...