Strict Standards: Resource ID#18 used as offset, casting to integer (18) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#23 used as offset, casting to integer (23) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#25 used as offset, casting to integer (25) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#26 used as offset, casting to integer (26) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Нюансы вставки скриптов в тэги HTML
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


 Страниц (1): [1] 

> Без описания
Самоделкин
Отправлено: 09 Ноября, 2007 - 01:45:45
Post Id



Junior Member


Покинул форум
Сообщений всего: 59
Дата рег-ции: Нояб. 2005  

Карма 1




Вопрос чисто теоретический. Практически всегда находил обходные маневры, но раздражает то, что я так и не докопался до сути.
Конкретно:
Делал я оглавление сборника функций VB.Net. А поскольку этих функций 162, мне стало лень прописывать все ссылки. Файлы с описанием функций называются так же, как и сами функции, только маленькими буквами + .html и лежат в той же папке.
И написал я следующее:
CODE:
<a href="javascript: this.href=this.innerHTML.toLowerCase()+'.html'">Asc</a>

Мне было сказано:
this.innerHTML - есть null или не является объектом.
Попробовал сделать так:
CODE:
<a href="" onClick="this.href=(this.innerHTML.toLowerCase()+'.html');">

или так
CODE:
<a href="#" onClick="this.href=(this.innerHTML.toLowerCase()+'.html');">

То же самое.
Получилось только так, вообще без href:
CODE:
<a onClick="this.href=(this.innerHTML.toLowerCase()+'.html');">

Но тогда ссылка перестала выглядеть как ссылка, и пришлось в CSS назначить ей класс с нужным цветом и подчёркиванием, а также сделать руками status bar.
CODE:
<a class="pslnk" onClick="this.href=(this.innerHTML.toLowerCase()+'.html');" onMouseOver="window.status=this.innerHTML.toLowerCase() + '.html'" onMouseOut="window.status=''">

Всё же получше, чем 162 разных ссылки, но...
Вопрос, наверно, такой:
Хотелось бы узнать, чем отличается механизм

CODE:
<a href="javascript: код">

от механизма
CODE:
<a onClick="код">

(Отредактировано автором: 09 Ноября, 2007 - 01:49:19)

 
 Top
Furax
Отправлено: 09 Ноября, 2007 - 09:54:43
Post Id



Бледнотик


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Март 2007  
Откуда: Иркутск, Сибирь, СССР

Карма 32




Самоделкин
Хороший вопрос! Сам теорию люблю...

Механизм href работает так: при щелчке на ссылке обрабатываются все связанные с этим события (onmousedown, onmouseup и только после этого onclick) и, если обработчик onclick не прекратил процесс перехода по ссылке (через return false; или более современный DOM2-метод), производится попытка перейти по ссылке. Это означает, что сама ссылка уже обработалась, а её адрес начинает анализироваться браузером, начиная с протокола. Если в качестве протокола указан javascript:, браузер запускает следующую за ним строку на интерпретацию. Но, поскольку на этом этапе всякая работа с гиперссылкой закончена (события уже обработаны, осуществляется переход), интерпретатор выполняет скрипт в глобальном пространстве имён. В глобальном пространстве имён идентификатор this ссылается во всех браузерах на window, а в некоторых - ещё и на document (одновременно с window!). Естественно, что у них нету свойства innerHTML, так что код не работает.

Механизм on... отличается тем, что скрипт выполняется в пространстве имён того объекта, для которого произошло событие, так что this ссылкается уже как раз на объект ссылки.

Самоделкин пишет:
CODE:
<a href="#" onClick="this.href=(this.innerHTML.toLowerCase()+'.html');">
Мне было сказано:
this.innerHTML - есть null или не является объектом.
Вот этого не понимаю. Проверил - все три браузера понимают
CODE:
<a href="#" onclick="this.href=this.innerHTML.toLowerCase()+'.html';">test</a>
Может быть, тег не был закрыт?..

(Отредактировано автором: 10 Ноября, 2007 - 23:12:34)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0)
« JavaScript »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.



Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0402]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33