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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> определение неопределенной переменной в функции? может такое быть 
:(
    Опции темы
Иль
Дата 24.3.2005, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



Здравствуйте. Вот такой вопрос, но примеров пока нет smile :

При событии онклик для многих элементов вызывается одна и таже функция.
Подскажите, возможно в ней создать переменную, заранее не зная ее имеи, те подставив, например, строковое значение пришедшее звне или имя текущего элемента или какое либо строковое значение, чтоб JS понял, что создается переменная с таким именем.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Aliance
Дата 24.3.2005, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Вот так подойдет:
Код

function myFunction (myvar) {
var newVar = myvar;
alert(newVar);
}

Код

<INPUT type="button" onclick="myFunction('value1')" value="ЖМИ!">
<INPUT type="button" onclick="myFunction('value2')" value="ЖМИ!">
<INPUT type="button" onclick="myFunction('value3')" value="ЖМИ!">

PM MAIL WWW ICQ Skype   Вверх
Sardar
Дата 25.3.2005, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Иль да можно:
Код

function crateVar(name, value) {
  window[name]=value;
}

В глобальном окружении видим переменную, но зачем такой изврат нужен?


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



Сказать правду? Sardar, я знал что ты спросишь... smile
На самом деле, понимаю что изврат, но первое решение пришло таким, а когда сделал на регах даже удивился насколько все проще и в две строчки.

Это была банальная смена картинок туда и обратно. Твое решение с inline обработчиками вдохновило, но не подошло - все должно работать только на онклик.
Я видел решение со счетчиком и if и подумал создать счетчик на каждую картинку, но не грузить себя генерацией недетского списка переменных, а создавать счетчики по мере надобнасти в той же функции. А потом меня осенило, что даже в этом варианте мне без регов не обойтись, да еще часто читаемая мной smile фраза Aliance: "...Делай на регах...делай на регах". Вот я и сделал.

Но идея-то зацепила smile . Я подумал, если такое есть и я пока недопоминаю, то очень хотелось бы енто знать.

Спасибо просто огромное.
Мне почему-то не пришли уведомления на e-mail о ваших постах smile , хотя подписан.

Это сообщение отредактировал(а) Иль - 25.3.2005, 12:34


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 25.3.2005, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



А вообще нет, в моем случае я мог бы обойтись без регов, применяя конкатенацию, хоть это и изврат.


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 25.3.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Иль выложи код, посмотрим, может выйдет лучше smile


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



Конечно, с удовольствием. Стеснялся попросить smile.

Основывается все на суфиксах или префиксах имен файлов
Я решил, что нагляднее будет с суфиксами.

1.Вот с регами. Прелесть: полностью независит от id (и их повторений), расширений файлов и наличия одинаковых картинок на странице. Условие, чтоб у картинок совпадали расширения (!! jpge и jpg не пойдет)
Код

function regChange(elem) {
if (/1\.\w{2,4}$/.test(elem.src)) {
elem.src=elem.src.replace(/1\.(\w{2,4})$/,"2.$1");
}
else { if(/2\.\w{2,4}$/.test(elem.src))
        {elem.src=elem.src.replace(/2\.(\w{2,4})$/,"1.$1")
        }
        else {alert("Ошибка, однако!\n\nВебмастеру сообщи, да?")// мой каприз, кудаж без него
        }
}}

2.Вот изврат без регов с конкатенацией, но зато, полезно-позновательный. Ограничения: id должно совпадать с именем файла без суфикса или префикса (здесь без суфикса) и работать можно только с к-либо одним расширением (здесь gif). Также если несколько картинок с одинаковым id, то может потребоваться повторный клик (из-за того, что для одинаковых id создаются одинаковые переменные-счетчики).
Посвещается: яро ненавидящим реги smile (а зря). Особые благодарности: Sardar, за знания, без которых ентоб не прокатило
Код

function regCounter(elem){
window[elem.id];
var p=window[elem.id].tostring;/*  ввел, т.к. не помню я как window[elem.id] проверить на undefined,
 ругается, мол "[object]". Поправте!!!   */

if  (p!=undefined||window[elem.id]==2){
window[elem.id]=1;elem.src=elem.id+"1.gif"
}
else{window[elem.id]=2;elem.src=elem.id+"2.gif"
}}


И, конечно для ленивых
Код

<html>
</head>
<script language="JavaScript" type="text/JavaScript">

</script>
<body>
<img src="pic1.gif" onClick="regChange(this)"><br><br>
<img src="pic1.gif" onClick="regChange(this)"><br><br><br>

<img src="pic1.gif" id="pic" onClick="regCounter(this)"><br><br>
<img src="pic1.gif" id="pic" onClick="regCounter(this)">
</body>
</html>


Интересно будет не только картинки менять...

А теперь судите!


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 25.3.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



Опаньки, а изврат в лисе не работает, опять же эта строчка, которую я ввел по незнанию
Код

var p=window[elem.id].tostring;




--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 25.3.2005, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



А вот такой немного универсальный код:
Код
<script language="Javascript" type="text/javascript">
<!--

function registerImgs() {
  var im=document.images;
  for(var i=0; i<im.length; i++) {
    if(im[i].getAttribute("first_image")) im[i].onclick=imgChange;
  }
}

function imgChange(im) {
  if(this.ImgChanged && this.getAttribute("first_image")) {
    this.ImgChanged=false;
    this.src=this.getAttribute("first_image");
  } else if(this.getAttribute("second_image")!=null) {
    this.ImgChanged=true;
    this.src=this.getAttribute("second_image");
  }
}
//-->
</script>

</head>

<body onLoad='registerImgs()'>

<img src='test.jpg' first_image='test.jpg' second_image='./galfiles/01.jpg' />
</body>

Перебираем все картинки после загузки, находим все кто имеет аттирбуты first_image. Аттрибутом second_image задаём картинку на которую мы меняем исходную картинку. Аргумент first_image в принципе не нужен, можно записывать src, но даёт немного ясности.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



Ну что я могу на это сказать: Божественно Sardar! Полная независимость от чего-либо. Красота.
Заодно, кое-кто и про работу с атрибутами выучил smile

У меня вопрос - про мой глюк в мазилле/лисе тут подскажете или новый топик сделать?

Это сообщение отредактировал(а) Иль - 26.3.2005, 09:33


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Иль
Дата 26.3.2005, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 544
Регистрация: 3.3.2005
Где: Москва

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



О! Разамбрамщись!
Код

function regCounter(elem){
window[elem.id];
// var p=window[elem.id]; - забыл стереть, не нужно
if  (window[elem.id]==2){
window[elem.id]=1;elem.src=elem.id+"1.gif"
}
else{window[elem.id]=2;elem.src=elem.id+"2.gif"
}}

Не доработал if и string была некчему

Это сообщение отредактировал(а) Иль - 28.3.2005, 13:30


--------------------
Ты виндусятник?... А я да. smile
PM MAIL ICQ Skype GTalk   Вверх
Sardar
Дата 26.3.2005, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


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

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



Вторая строчка: window[elem.id]; - ничего полезного не делает smile
Во вторых не нужно создавать кучу переменных, можно создать поле у обьекта имейджа:
Код
function regCounter(elem){
  if(elem.swaped) {
      elem.swaped=false;
      elem.src=elem.id+"1.gif";
  } else {
      elem.swaped=true;
      elem.src=elem.id+"2.gif"
  }
}


Код
<img src="pic1.gif" id="pic" onclick="regCounter(this)" />



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


 




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


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

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