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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добраться до свойств ссылки из обработчика, Почему свойства не определены? 
V
    Опции темы
kaa
  Дата 1.6.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот я создаю динамически ссылку:

Код

setInterval("fUpdate()",3000);
function fUpdate()
{
  ...
  var new_link = document.createElement("a");
  col2.appendChild(new_link);
  col2.firstChild.appendChild(new_text);
  col2.firstChild.setAttribute("href","javascript:linkClick(this)");
  ...
}


и пытаюсь получить доступ к тексту между <a href> и </a> в обработчике.

Код

function linkClick(obj)
{
   var addresat = obj.innerHTML;
   alert(addresat);
}


Но вылазит undefined. Пробовал располагать скрипт между </body> и </html> - ну чтобы начинал исполняться после загрузки документа, но он у мя вроде и так начинает исполняться после загрузки через 3 секунды...

Почему не определены свойства ссылки?  smile 
 
PM MAIL   Вверх
12345c
Дата 1.6.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

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



Всё работает, только писать надо грамотно:
Код
 <script> //setInterval(fUpdate,3000);
function fUpdate(){
  //...
  col2=document.getElementById('col_2')
  new_text=document.createTextNode("***");
  new_link = document.createElement("a");
  new_link.appendChild(new_text);
  col2.appendChild(new_link)
  col2.firstChild.setAttribute("href","javascript:linkClick(this)");
  //...

}onload=function(){fUpdate();alert(col2.firstChild.innerHTML);}
</script> 
<div id=col_2></div>


Добавлено @ 21:29 
(К примеру, не "вылазит", а "вылезает".) 
PM WWW   Вверх
kaa
Дата 1.6.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Прастите, наверное зря я невыложил весь скрипт, во первых троеточие я добавил чтобы не писать весь текст скрипта, во вторых объект  col2 также создаётся динамически... И в третьих зачем комментировать функцию 
Код

setInterval(fUpdate,3000)


Мне нужно чтобы скрипт обновлял информацию через определённый промежуток времени, а не только при загрузки... Вот...

Вот полный текст скрипта, фактически он формирует весь контент, изначально страница пустая.

Код

<html>
<head>
</head>



<script language="javascript">
    setInterval("fUpdate()",3000);
    var parent_window = window.parent;
    var frame_info = parent_window.frame5.document;
    
    
    
    function fUpdate()
    {
        
        var m_update = frame_info.getElementById("AddDelUserNew");
        if(m_update.firstChild.nodeValue=="y")
        {        
                
            var add_user = frame_info.getElementById("AddUser");
            if(add_user.hasChildNodes())
            {
                var child_amount = add_user.childNodes.length;
                
                for(var i=0; i<=child_amount-1; i++)
                {
                    if(add_user.childNodes[i].nodeType == 1)
                    {
                        var temp = add_user.childNodes[i].firstChild.nodeValue;
                        var m_f = add_user.childNodes[i].lastChild.firstChild.nodeValue;
                        var tableNode = document.childNodes[0].childNodes[1].firstChild; 
                        var new_tr = document.createElement("tr");
                        var new_td = document.createElement("td");
                        var new_td1 = document.createElement("td");
                        var new_tbody = document.createElement("tbody");
                        var new_img = document.createElement("img");
                        var new_link = document.createElement("a");
                        var new_text = document.createTextNode(temp);
                        
                        tableNode.appendChild(new_tbody);
                        tableNode.firstChild.appendChild(new_tr);
                        
                        tableNode.firstChild.lastChild.setAttribute("id",temp.concat("_str"));
                        
                        tableNode.firstChild.lastChild.appendChild(new_td);
                        tableNode.firstChild.lastChild.appendChild(new_td1);
                        var col1 = tableNode.firstChild.lastChild.firstChild;
                        var col2 = tableNode.firstChild.lastChild.lastChild;
                        col1.appendChild(new_img);
                        if(m_f=="m")
                        {
                            col1.firstChild.setAttribute("src","male.png");
                        }
                        else
                        {
                            col1.firstChild.setAttribute("src","female.png");
                        }
                        
                        col1.setAttribute("height","20");
                        
                        col1.setAttribute("width","20%");
                        
                        col2.setAttribute("width","80%");
                        col2.appendChild(new_link);
                        col2.firstChild.appendChild(new_text);
                        col2.firstChild.setAttribute("href","javascript:linkClick(this)");
                    }
                }
                
            }
            
            
            var del_user = frame_info.getElementById("DelUser");
            if(del_user.hasChildNodes())
            {
                var child_amount = del_user.childNodes.length;
                for(var i=0; i<=child_amount-1; i++)
                {
                    if(del_user.childNodes[i].nodeType == 1)
                    {
                        var temp = del_user.childNodes[i].firstChild.nodeValue;
                                                                        var deleting_str = document.getElementById(temp);
                        var parent_node = deleting_str.parentNode;
                        parent_node.removeChild(deleting_str);                        
                    }    
                }
            }
            
            
            m_update.firstChild.nodeValue="n";
        }            
    }
    
    
    
    function linkClick(obj)
    {
        
        var addresat = obj.innerHTML;
        alert(addresat);
    }
    
</script>





<body bgcolor="#FD5433" style="padding:0; margin:0;">
    <table border="1%" width="100%" style="padding:0; margin:0;">
    </table>
</body>

</html>


ВОТТТ! 
PM MAIL   Вверх
Messenger
Дата 2.6.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

col2.firstChild.setAttribute("href","javascript:linkClick(this)");

this это window обьект.
Код

function linkClick(obj)
    {
        //var addresat = obj.innerHTML;
        alert("Info: " + obj + " " + obj.innerHTML); // очень хорошо видно в  FF
    }

можно идти через onclick
Код

col2.firstChild.onclick = linkClick;
...
function linkClick(evt)
{
  if(evt != null) // NN-FF
  {alert("Info: " + evt.target.innerHTML);}
  else // IE
  {alert("Info:" + event.srcElement.innerHTML);}
}
 
PM MAIL   Вверх
12345c
Дата 2.6.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

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



Цитата(kaa @  1.6.2006,  22:30 Найти цитируемый пост)
Мне нужно чтобы скрипт обновлял информацию через определённый промежуток времени
Тогда её ставить в onload.

Можно и с пустого документа строить структуру, тогда корнем будет document.body или document.documentElement (если Doctype). Если что-то не идёт, значит, ошибка в скрипте.

Показывать весь код, конечно, надо было сразу, т.к. речь об ошибке. 
PM WWW   Вверх
kaa
Дата 2.6.2006, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо за ответы, извиняюсь за долгое отсутствие, щас попрпобую... 
PM MAIL   Вверх
kaa
Дата 2.6.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



12345c,  Поставил в онлоад, всё работает также... 
Не просвятишь почему именно в онлоад нада ставить а не просто оставлять как у меня? Ведь работало же...

Добавлено @ 23:42 
Messenger, 

Код

alert("Info:" + event.srcElement.innerHTML);


Неработает, гаварит необходим объект! 
PM MAIL   Вверх
12345c
Дата 3.6.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

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



Очень просто, потому что onload - это событие по сформированию документа, когда гарантированно существуют объекты его. (Но могут не успеть прорисоваться картинки и прочие недочёты.) Любая задержка не гарантирует существование структуры документа. 
PM WWW   Вверх
Messenger
Дата 3.6.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



kaa, примерно так:
Код

<html>
<head>
</head>
<body>
<script language="javascript">
var k = 0;
function fUpdate(){
  //...
    k++;
  col2=document.getElementById('col_2')
  new_text=document.createTextNode("*** " + k);
  new_link = document.createElement("a");
  new_link.appendChild(new_text);
  col2.appendChild(new_link);
    col2.appendChild(document.createElement("br"));
    new_link.onclick = linkClick;
    new_link.setAttribute("href", "http://www.google.ru");
  //...
}onload=function(){setInterval("fUpdate()", 3000);}
function linkClick(obj)//  может достаточно лиш задать аттрибут target для ссылки?
{
    if(obj != null)
    {
      alert("Info NN: " + obj + " " + obj.target.innerHTML + " " + obj.target.href);
        obj.stopPropagation();
        return false;
    }
    else
    {
      alert("Info IE: " + event + " " + event.srcElement.innerHTML + event.srcElement.href);
        event.returnValue = false; 
//parent.someFrame.location.href = someHrefChanger(event.srcElement.href);
    }
}
</script> 
<div id=col_2></div>

</body>
</html>
 
PM MAIL   Вверх
kaa
Дата 3.6.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Messenger, target не пойдёт - он мне ваабще не пришей кобыле хвост. Мне нужно обработать текст ссылки и впихнуть в другой фрейм.. .Не target здесь ненужен... Ща примерчик  твой разберу... 
PM MAIL   Вверх
kaa
Дата 4.6.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так, всё... Глухо как в танке... Ничё невыходит..  Важе реально прописать обработчик объекту в процессе его создания и потом получить в обработчике доступ ко всем его свойствам?

Ведь обработчик-то вызывается! Тока объект передаётся ему чёрти знает какой! Что-то передаётся а что непонятно  smile   smile   smile  
PM MAIL   Вверх
Messenger
Дата 5.6.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я уже писал, что если:
Цитата

//col2.firstChild.setAttribute("href","javascript:linkClick(this)");
new_link.setAttribute("href", "javascript:linkClick(this)");

то передаётся window обьект (аргумент this в linkClick).
А если напишеш так:
Код

{
new_link.onclick = linkClick;
new_link.setAttribute("href", "http://www.online.ru");
...
}
function linkClick(obj)
{
...
}

то в linkClick в ИЕ ничего не будеть переданно (всё идёт через обьект [window.]event), а в Nescape Navigator (firefox) будет передан event обьект, как первый аргумент.
 
PM MAIL   Вверх
12345c
Дата 5.6.2006, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

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



Цитата(kaa @  4.6.2006,  21:02 Найти цитируемый пост)
реально прописать обработчик объекту в процессе его создания и потом получить в обработчике доступ ко всем его свойствам?
 Реально, только много мест, где ошибиться можно, аккуратно надо писать, проверяйте себя тестовыми скриптами (вставками) на каждом трудном месте. В частности, при прописывании все объекты должны существовать, особенно документ smile.
 
PM WWW   Вверх
kaa
Дата 5.6.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Messenger, 
Гм, разрешите дилетантский вопрос...
Я в общем знал о таком методе задания обработчика как

n
Код

ew_link.onclick = linkClick;


Но я читал что он не примеим когда в функцию обработчик необходимо передавать параметры! Неужто параметр передаётся автоматом! Объсните пажалста  smile 
 
PM MAIL   Вверх
kaa
Дата 6.6.2006, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Messenger, И еще один вапрос: какой адрес нада ставить в ссылку чтобы она никуда не перекидывала, только тупо посылала сообщение о событии и вызывала обработчик? 

Код

new_link.onclick = linkClick;


обработчик неработает вообще

Попробовал так 

Код

new_link.onclick = linkClick();


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


 




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


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

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