Как изменить значение объекта JavaScript в событии - PullRequest
0 голосов
/ 26 июля 2011

У меня одна сложная ситуация с JavaScript. Я создал объект. Этот объект загружает файлы JS, CSS динамически (см. Функцию загрузки). Моя проблема в том, что я хочу добавить событие onload при загрузке объектного файла и изменить некоторые значения в этом объекте.

Конструктор моего объекта:

function lib( type, url )
{
  //Varaibles
  this.URL = url;        //Files url
  this.TYPE = type;      //Files type( can by CSS or JS )
  this.READY = false;    //Files loaded status
  //Functions
  this.load = load;      //Method, which is called to start loading file
  this.status = status;  //Return READY status( false or true )
}

Итак, я пытаюсь при загрузке файла изменить состояние готовности. Эту вещь я хочу установить в функцию загрузки. На данный момент у меня есть эта функция загрузки:

function load()
{
    var object = this;
    switch ( this.TYPE.toUpperCase() )
    {
        case "JS" :
        {
            var script = document.createElement( "script" );
            script.setAttribute( "type", "text/javascript" );
            script.setAttribute( "src", this.URL );
            document.getElementsByTagName( "head" )[0].appendChild( script );


            if( navigator.appName == "Microsoft Internet Explorer" )
            {
                script.onreadystatechange = function () { this.READY = true; };
            } else {
                script.onload =function () { this.READY = true; };
            }

            break;
        }
        ( Here should be CSS loading... )
    }
}

Итак, ребята, мне нужно посмотреть мой код и посмотреть, что я делаю неправильно

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Когда вызывается обработчик события, он выполняется в контексте элемента скрипта, а ключевое слово this указывает на него, вместо него используется object.READY = true;.

1 голос
/ 26 июля 2011

Если ваша проблема связана с событием 'readystatechange', вы можете попробовать исправить это так:

script.onreadystatechange = function () {
    if (this.readyState == 4)
        object.READY = true;
};
...