За последние 24 часа нас посетили 17363 программиста и 1264 робота. Сейчас ищут 1638 программистов ...

Зоны видимости

Тема в разделе "JavaScript и AJAX", создана пользователем armadillo, 20 апр 2007.

  1. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Есть шаблон который вставляется несколько раз на страницу.
    В шаблоне много интерактива, т.е. по изменению одного поля меняется другое поле и т.п.
    делаю их с именами полей ..._0, ..._1 и т.п.
    пишу класс для обработки со свойством name='0', name='1' и т.п.
    function Myclass() {

    }
    function func1() {
    ...
    }
    Myclass.prototype.name='';
    Myclass.prototype.func1=func1;
    MyObj= new Myclass;
    MyObj.name=0;


    пока все прекрасно, this.hash['a']['b'] , getElementById('xxx_'+this.name) и т.п.

    в интерактиве есть вешалка на таймаут по onkeyup.
    туда вызова this.func() не получается, вызывается видимо прототип функции без класса.
    никакого this там уже нет.
    могу сделать вызов OutFunc(uid) вместо this.InnerFunc();
    но как потом обращаться к свойствам класса?

    Переделал, создал массив объектов
    MyObj = Array();
    MyObj[0]= new MyClass;
    ...

    все стало коряво, но работает. До тех пор пока не вызывается onkeyUp на поле.
    объект MyObj0 он согласен видеть, MyObj[0] ни за что.
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    onkeyup="xUp(0)"

    function xUp(uid) {
    alert(MyObj[0].name);
    }

    НЕ работает.
    Ошибка: MyObj is not defined





    onkeyup="xlx(0)"
    function xlx(uid)
    {
    if (timeout0) clearTimeout(timeout0);
    timeout0 = setTimeout(xUp(uid), 1);
    }
    Работает.




    Я не хочу ТАК жить.