Что не так с addlistener ... как запустить событие - PullRequest
0 голосов
/ 24 марта 2010

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

function addEvent( obj, type, fn ) {
 if (obj.addEventListener) {
  obj.addEventListener( type, fn, false );
 }
 else if (obj.attachEvent) {
  obj["e"+type+fn] = fn;
  obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
  obj.attachEvent( "on"+type, obj[type+fn] );
 }
 else {
  obj["on"+type] = obj["e"+type+fn];
 }
}

function addEventByName(ObjName, event, func){
 MyEle = document.getElementsByName(ObjName);
 addEvent(MyEle[0], event, func);
}

addEventByName("txtBox", 'blur', function(){
 alert('hello');
});

function fire(){
 x = document.getElementsByName('txtBox')[0];
 x.blur(); //gives error
 x.onblur(); //gives error
}

1 Ответ

0 голосов
/ 24 марта 2010

Адаптируя код, заданный как расширение jQuery в этот ответ , вот функция, которую вы можете использовать для программного запуска кросс-браузера событий:

function fireEvent(el, eventType)
{
    if (document.createEvent)
    {
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(eventType, false, false);
        el.dispatchEvent(evt);
    }
    else if (document.createEventObject)
    {
        el.fireEvent("on" + eventType);
    }
}

Ваша функция fire будет выглядеть следующим образом:

var x = document.getElementsByName("txtBox")[0];
fireEvent(x, "blur");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...