Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Как при описании объекта описать событие для


Автор: DEER 1.8.2007, 13:08
День добрый…  Пытаюсь написать объетк, один из элементов которого будет текстовое поле с формы…
Мне нужно в конструкторе прикрутить к полю событие – функцию с параметрами
Пробую вот так

Код

function MyObj(DivId, tbId) {
    this.oTextBox = document.getElementById(tbId);
    oDiv = document.getElementById(DivId);

    this.oTextBox.onkeydown = function() { 
test(oDiv);  // вот сдесь нужно передать параметр к функции – объект - oDiv
}
}

function test(obj) {
    alert(obj);  // выводит «undefened»
}


Подскажите пожалуйста как такое правильно делать...
Или как можно использовать в функции test элемент oDiv из экземпляра MyObject?

Автор: Zeroglif 1.8.2007, 13:35
Не видно, как создаётся объект, не виден html. Из того, что видно только просится var перед oDiv, а так... код рабочий, попробуй проверить в функции MyObj, в какой момент потерялся oDiv. У меня всё работает.

Автор: DEER 1.8.2007, 13:41
Создается вот так
Код

      <script type="text/javascript" language="JavaScript1.2">new MyObj("myDiv", "companySearcher")</script>


такс... код действительно рабочий получается....
Ща посмотрел - сравнил со своим кодом.. есть разница...
Код

function MyObj(DivId, tbId) {
    this.oTextBox = document.getElementById(tbId);
    this.oDiv = document.getElementById(DivId);
    this.oTextBox.onkeydown = function() { 
      test(this.oDiv);  // вот сдесь нужно передать параметр к функции – объект - oDiv
     }
}
function test(obj) {
    alert(obj);  // выводит «undefened»
}
  
то есть oDiv не просто переменная, а тоже элемент объекта

Автор: Zeroglif 1.8.2007, 14:01
Цитата(DEER @  1.8.2007,  13:41 Найти цитируемый пост)
то есть oDiv не просто переменная, а тоже элемент объекта

this в javascript летающий, то есть связывается динамически, зависит от выражения вызова. В функции onkeydown значением this является ссылка на инпут, свойств с именем oDiv у инпута нет, отсюда - undefined. Вариант в лоб - завести такое свойство инпуту или отказаться от this (как это было в предыдущем примере, где замыкание захватило лексическое окружение). Ну, или пересмотреть логику, например, передать в test id дива, а та уже этот элемент сама достанет....

Автор: DEER 1.8.2007, 14:07
Спасибо.
Пока ждал ответа сам стал задумываться а нужно ли мне oDiv делать елементом объекта... он же у меня только создается и нигде больше не используется. Тщ есть oDiv вполне сможет быть обыкновенной переменной.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)