Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление события с помощью класса, Добавление события с помощью класса 
V
    Опции темы
fclmfan
Дата 26.10.2009, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Werdum face
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 64
Регистрация: 21.10.2008

Репутация: нет
Всего: нет



Всем привет!!!

Вобщем имеется такой код!

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>JS class</title>
<script>
    with(Test=new Function){
        
        //Объявляем методы
        prototype.message=function(){
            alert("zzz");
        }

        prototype.constructor=function(_form_obj){
            _form_obj.elements[0].style.backgroundColor="red";
            _form_obj.elements[0].attachEvent("onclick", function (){this.message()});
        }    
    }

    var t=new Test();

    function initDocument(){
        var doc=document;
        var formobj=doc.myform;
        t.constructor(formobj);
    }
</script>
</head>

<body onload="initDocument()">
<form name="myform">
    <input type="text" name="input1"/>
</form>
</body>
</html>


я хочу динамически при загрузке инициализировать input1:
изменить стиль получилось 
Код
_form_obj.elements[0].style.backgroundColor="red";
,
а вот при добавлении события 
Код
_form_obj.elements[0].attachEvent("onclick", function (){this.message()});
 ясный перец вылазит ошибка... а хочу чтобы на событие исполнялась функция класса. Как это реализовать?
PS и ещё, мне это нужно только для IE, поэтому использую attachEvent...
PM   Вверх
bars80080
Дата 26.10.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



а как-то так?

Код

_form_obj.elements[0].onclick = function (){this.message()};

PM MAIL WWW   Вверх
fclmfan
Дата 26.10.2009, 11:56 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Werdum face
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 64
Регистрация: 21.10.2008

Репутация: нет
Всего: нет



нее, не проканало... вы проверяйте у себя сначала, будет работать или нет, потом выкладывайте код... smile 
PM   Вверх
brother79
Дата 26.10.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



Ну а что значит "не проканало?" Ошибка где? Попробуй что-то типа 


Код

_form_obj.elements[0].attachEvent("onclick", function (){ alert(this.message()); });


Посмотри в чём вообще проблема? Может this не к тому классу относится. Поидее вообще можно не писать  function (){this.message()},  а написать сразу this.message без скобок, только надо смотреть куда ссылается this В твоём случае как раз мало шансов, что работать будет, т.к. твой обработчик вызовется скорее всего от имени другого объекта и this будет ссылаться именно на него. Если ты из ф-ии хочешь вызвать какой-то метод, передавай класс замыканием, например:

Код

var e = this
_form_obj.elements[0].attachEvent("onclick", function (){ e.message(); });




--------------------
PM MAIL WWW   Вверх
Kevin
Дата 26.10.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.11.2005

Репутация: нет
Всего: 2



У вас:
Код
function (){this.message()}

В данном контексте this уже не относится к Test,
необходимо использовать переменную, которая реально 
содержит нужный объект, в вашем случаи это t.

Т. е. нужно сделать так:
Код
function (){t.message()}



UPD: Упс, модератор, удалите мое сообщение, я повторился, 
автор выше все, что надо уже сказал, а я и не заметил...

Это сообщение отредактировал(а) Kevin - 26.10.2009, 12:54
PM MAIL   Вверх
fclmfan
Дата 26.10.2009, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Werdum face
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 64
Регистрация: 21.10.2008

Репутация: нет
Всего: нет



в таком варианте ошибка вылазила
Код

_form_obj.elements[0].onclick = function (){this.message()};
,

попробовал ваш вариант, получилось... вроде нормально работает... спасибо за объяснение brother79 и Kevin  smile 
PM   Вверх
IDVsbruck
Дата 26.10.2009, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 7
Всего: 22



Или так:
Код

with (Test = new Function) {
    prototype.message = function() {
        alert("zzz");
    }
    prototype.constructor = function(_form_obj) {
        _form_obj.elements[0].style.backgroundColor = "red";
        _form_obj.elements[0].onclick = function() {prototype.message()};
    }    
}

PM MAIL   Вверх
brother79
Дата 27.10.2009, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 18.8.2009

Репутация: 1
Всего: 6



.



Это сообщение отредактировал(а) brother79 - 27.10.2009, 06:28


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.