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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача параметра в <a onclick> 
:(
    Опции темы
0000
Дата 26.10.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет всем..Вот пример кода...

Код

  <img id="img_obj" src="bear.jpg"></img>
  <script>
    
Код

function GetProperties(obj,parent)
    {
     document.write("<ul>");
     for (var i in obj)
     {
        if (parent)
            document.write("<li>" + parent + "." + i + "=");
        else
            document.write("<li>" + obj.id + "." + i + "=");
        if(IsObject(obj[i]))
         {    
//???????????????????????????               
document.write('<a href="#view" OnClick="GetChildProperties(' + obj +',' + i + ',' + parent + ')"> ' + obj[i] + '</a>');
//???????????
         }
        else
        document.write(obj[i]);
       }
      document.write("</ul>");
     }
    
    function IsObject(obj)
    {
        return (typeof(obj) == 'object') && (obj!=null)
    }
    function GetChildProperties(obj, i, parent)
    {
        alert("1212");
    }    
        
    GetProperties(img_obj);
    
 </script>


Объясните момент, почему в выделенной строке если передавать параметр obj - не работает, а если любой другой (например i или parent или строку, число и т.д.), то работает??? что в параметре obj такого особенного?

Тока объясните плз максимально просто без выпендрежа типа иди в поиск и замудренных слов...плз.спасибо

Это сообщение отредактировал(а) 0000 - 26.10.2008, 15:17
PM MAIL ICQ   Вверх
ksnk
Дата 26.10.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата

максимально просто без выпендрежа типа иди в поиск

А без синтаксических ошибок код слабо предъявить?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
0000
Дата 26.10.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



почему-то когда нажимаю на редактирование поста - открывается окно и подвисает..на мышу реагирует, на клаву нет...ну я подумал клава отрубилась, побарабанил по кнопкам...а оказалось вот он мне вместо нулл какую кракозябру написал..
PM MAIL ICQ   Вверх
0000
Дата 3.11.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ну так что, мегаспецы по жаве скрипту.... никто не знает, как объяснить сие явление?
PM MAIL ICQ   Вверх
IDVsbruck
Дата 4.11.2008, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Только вчера на подобную тему в соседнем посте писал.

Насколько понимаю по "максимально просто", то, мягко говоря, ты новичок. Тогда "по-простому" ... smile

1. Результатом действия функции 
Код
...
document.write('<a href="#view" OnClick="GetChildProperties(' + obj +',' + i + ',' + parent + ')"> ' + obj[i] + '</a>');
...

при одной картинке будет следующим:
Код
<a href="#view" OnClick="GetChildProperties([object],0,{name_of_parent})">[object]</a>

С какой стати данная конструкция должна работать?

2. Практика использования "document.write()" очень плохая. Это пример того, как не надо делать. Этот метод отлично подходит только для "Hello, world!"
Для работы с элементами у программера есть модель DOM. Судя по коду, я не очень понимаю, что есть "GetProperties(img_obj);" и как согласуются "GetProperties(img_obj);" и "function GetProperties(obj,parent)". Возможно, он обрезан, и поэтому помочь сложно. Возможно, надо дать более валидный код без сильного обрезания (и двойной вставки кода), тогда помочь будет проще.

3. Допустим, ты отказался от "document.write()" и взял на вооружение DOM (ну, или хотя бы атрибут html контейнера, в который можно поместить ссылки, например, div). В этом случае в цикле будет создаваться ссылка следующим образом:
Код
var link = document.createElement("a");
link.href = "#view";

А дальше идет стандартная ошибка всех новичков:
Код
link.onclick = function() {GetChildProperties(obj, i, parent); return false;};

Однако данная конструкция работать не будет, так как время жизни функции GetProperties, а, следовательно, и переменных obj, i, parent, очень коротко. Следовательно, на момент возникновения события onclick в функцию GetChildProperties будет передаваться неизвестно что (возможно, null).

4. Чтобы обойти данный коллапс, существует понятие замыкания - уникальная возможность javascript. Есть более короткий, но более сложный для понимания вариант:
Код
link.onclick = function(par1, par2, par3) {function() {GetChildProperties(par1, par2, par3);}}(obj, i, parent);

и более длинный, по более понятный:
Код
function GetProperties(obj,parent) {
    ...
    setOnclickOnLink(link, obj, i, parent);
    ...
}
function setOnclickOnLink(link_object, par1, par2, par3) {
    var handler = function() {
        GetChildProperties(par1, par2, par3);
    }
    link_object.onclick = handler;
}


Надеюсь, объяснил достаточно доступно ...
PM MAIL   Вверх
0000
Дата 4.11.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(IDVsbruck @ 4.11.2008,  02:13)
1. Результатом действия функции 
Код
...
document.write('<a href="#view" OnClick="GetChildProperties(' + obj +',' + i + ',' + parent + ')"> ' + obj[i] + '</a>');
...

при одной картинке будет следующим:
Код
<a href="#view" OnClick="GetChildProperties([object],0,{name_of_parent})">[object]</a>

С какой стати данная конструкция должна работать?

т.е. я в функцию GetChildProperties() вообще не могу передать объект?? я же вроде передаю здесь не просто строчку "[object]", а сам объект...я вот этого не понимаю...

за остальное - Great Thanks! 
+1
PM MAIL ICQ   Вверх
IDVsbruck
Дата 4.11.2008, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


 




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


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

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