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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Достать функцию по имени в строке, разьясняем что функция и так доступна 
:(
    Опции темы
Ashen
Дата 5.9.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Надо приаттачить к элементу событие в зависимости от имени класса, т.е. можно 
ли написать в JavaScript что-то типа следующего PHP-шного кода:
Код

$className="cClass";
$newClass=new $className;


для случая(JavaScript):


Код

newListItem.addEventListener("click",function() { /*Здесь должно быть имя класса*/.jslTPSetActive(1,1);},false);


Строка кода из функции класса - имя класса хранится в this.name

Используется код http://forum.vingrad.ru/index.php?showtopic=32350 из статьи Sardar'a
--------------------
Хочешь помочь новичку - делай вместе с ним;Хочешь помочь старику - сделай за него;Хочешь помочь мастеру - отойди в сторону;Хочешь помочь дураку - сам дурак...
PM MAIL   Вверх
Sardar
Дата 5.9.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Ashen, а что конкретно не получаеться? В JS всё что угодно, включая функии/конструкторы ("классы") доступны по именам в момент исполнения, т.к. это просто переменные (смволы). Другое дело что нет в JS статичных методов в том виде, в котором ты это себе представляешь (и в этом сила JS). Если  написать myClass.jslTPSetActive(1,1), и myClass это функция, то вызовем её метод jslTPSetActive, это вероятно не то что ты хочешь.

Ashen, JS на много гибче PHP, там где в PHP пользуем строки и call_user_func, в JS это нормальные выражения, т.к. функции и вообще всё что угодно, это обьекты, лежащие в переменных.
Отсюда: выкладывай что ты хочешь сделать в функциональном (что делать) смысле.

Цитата(Ashen @  5.9.2006,  09:28 Найти цитируемый пост)
можно ли написать в JavaScript что-то типа следующего PHP-шного кода:

Код
function test() {}
var myTest = test;

var a = new myTest();
var b = "myTest"; //строка
var c = window[b]; //наша myTest, хотя так делать не красиво
var d = new c(); //или сразу new window[b];



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ashen
Дата 5.9.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Суть - есть класс, который создает два списка. Элементы списков можно перебрасывать из одного списка в другой (все сделано div'ами и js) при создании списка во время загрузки список генерится document.write(). Но потом при реализации переброски элемента из одного списка в другой пришлось задействовать DOM. С генерацией элементов проблем не возникло, а вот с аттачем событий начались траблы  smile . Просмотрел твою статью - понял мало (опыт написания на JavaScript  - неделя), но код дернул и прикрутил - все работает перфектно, но мне чтобы функция выполнялась от конкретного объекта класса, т.е. что бы код
Код

newListItem.addEventListener("click",function() { /*Здесь должно быть имя класса*/.jslTPSetActive(1,1);},false);

делал, то же, что и например:
Код

document.write("<div id=\"elem"+i+"\" onclick=\""+this.name+".MethodName()\"></div>");

И плиз, пока не надо ссылки на мануалы и книги - просто времени нет читать  smile 
ЗАМЕЧЕНИЕ:
Все вышеупомянутые куски кода происходят внутри класса.

Это сообщение отредактировал(а) Ashen - 5.9.2006, 11:44
--------------------
Хочешь помочь новичку - делай вместе с ним;Хочешь помочь старику - сделай за него;Хочешь помочь мастеру - отойди в сторону;Хочешь помочь дураку - сам дурак...
PM MAIL   Вверх
Sardar
Дата 5.9.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Ashen, замени /*Здесь должно быть имя класса*/ на this, всегда указывает на элемент на котором зарегистрировали событие, т.е. this.style.backgroundColor="red" изменит стиль элемента. Почему так уже обьяснял много раз на форуме smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ashen
Дата 5.9.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пробовал... не совсем же я деревяшка smile - В итоге нарываемся на
Цитата

Error: Object doesn't support this property or method
Code: 0


Добавлено @ 12:14 
Вот обходной вариант, но работает только в Mozilla  smile 
Код

<html>
<head>
<title>ASD</title>
<script type="text/javascript">
function evnt()
{
    document.write("<div id=\"elem"+i+"\" onclick=\""+this.name+".MethodName()\"></div>");
}
function writeContent()
{
    //document.write('<div style="border:1px solid lime">Lime</div>');
    var root=document.getElementById('main');
    var chld=document.createElement('script');
    chld.setAttribute("language","javascript");
    var code=document.createTextNode('evnt();');
    
    chld.appendChild(code);
    root.appendChild(chld);
}
</script>
</head>
<body>
<div id="main" style="border:1px solid red;">
Simple text
</div>
<input type="button" onclick="writeContent()" value="push_me"/>
</body>
</html>


IE пишет:
Цитата

Unexpected call to method or property access

--------------------
Хочешь помочь новичку - делай вместе с ним;Хочешь помочь старику - сделай за него;Хочешь помочь мастеру - отойди в сторону;Хочешь помочь дураку - сам дурак...
PM MAIL   Вверх
Sardar
Дата 5.9.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



writeContent() - это нужно в копилку самых не мыслимых решений smile 

Ashen, без шуток, у тебя очень не стандартное мышление, жаль оно опять же не эффективно, в смысле даёт не эффективные решения. Так писать не нужно... никогда...  smile 

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>ASD</title>

<script type="text/javascript">
function evnt(tgt, rep) {
    var d = document.createElement('div');
    d.appendChild(document.createTextNode("Test"));
    d.addEventListener("click", function(){ rep.myMethod(this.tagName) }, false);
    tgt.appendChild(d);
}


function writeContent() {
    var root = document.getElementById('main');
    var myObj = { myMethod: function(t){ alert("I'm the myObj.myMethod! Arg: "+t);}};
    evnt(root, myObj);
}
</script>
</head>
<body>
    <div id="main" style="border:1px solid red;">Simple text</div>
    <input type="button" onclick="writeContent()" value="Push me">
</body>
</html>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ashen
Дата 6.9.2006, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



млин, оборжал -  smile 
там и вправду немного вата написана - дает не совсем то (совсем не то) - 
потом уже догнал, когда пытался приладить.
но все равно пасиб... smile 
--------------------
Хочешь помочь новичку - делай вместе с ним;Хочешь помочь старику - сделай за него;Хочешь помочь мастеру - отойди в сторону;Хочешь помочь дураку - сам дурак...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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