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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Делаем ссылки с подтверждением - 2, С помощью нового атрибута... 
:(
    Опции темы
Zeroglif
Дата 6.11.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(GZep @  5.11.2006,  14:54 Найти цитируемый пост)
а ИЕ правда "Stupid", т.е. тупой?

Нет.
Цитата(SelenIT @  6.11.2006,  00:44 Найти цитируемый пост)
не все теги A - ссылки

Не все srcElement или target линков (с виду) имеют href smile , к примеру с такими ссылками (дёрнул прямо сейчас из rbc.ru):

Код

    <A href="http://subscribe.rbcdaily.ru/">
        <B>
            <FONT style="COLOR: #363" size=-1>Бесплатная подписка для читателей РБК</FONT>
        </B>
    </A>


ваш код не заработает. Неприятная разметка, конечно, но жизненная...
PM MAIL WWW   Вверх
GZep
Дата 6.11.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Цитата

ваш код не заработает

Вош - это какой? Их тут 2 - мой вариант и еще один, уже не мой.

Оба варианта игнорируют ссылки без атрибута confirm.


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
AKS
Дата 6.11.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

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



Если что (т.е. если это может быть интересным), то я хоть и представлял свой вариант как "не совсем серьезный", но все же внес две маленьких поправки в полном соответствии с замечаниями SelenIT и Zeroglif. 
PM MAIL   Вверх
SelenIT
Дата 7.11.2006, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Zeroglif, я дико виноват, иду мылить веревку и посыпать голову пеплом... smile  я дейстительно верил, что событие всплывет через тег A и он станет в свою очередь срцэлементом... какого лешего я вылез из своего радиоактивного заповедника и пошел в программирование, не понимаю... 


GZep, простите меня, пожалуйста, за то, что сбил с истинного пути...  smile

Всем, в первую очередь модераторам: прошу лишить меня всей репы в разделе javascript - за такие ошибки, как совершенная мной, прощать нельзя, по-хорошему за такое ламерство надо расстреливать...

Это сообщение отредактировал(а) SelenIT - 7.11.2006, 01:36


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 7.11.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

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



SelenIT, 
Цитата

иду мылить веревку...

Эй-эй, Вы что? Уж если дело дойдет до "веревки", то ее нужно перенаправить на Xpoint - в соответствии с принципом "всплывания" событий.   ;)   Ведь как там у них, что-то типа - авторитетно звучащий ответ  хуже чего-то там, так ведь? А именно "авторитетно звучащим ответом" Вас самого там сбили с толку... 
Если серьезно - а может быть какое-нибудь там условие добавить? 
PM MAIL   Вверх
GZep
Дата 7.11.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Цитата

иду мылить веревку...

Вешаться - уже не модно. На данный момент самое "ано" - это смерть от передазировки "сами знаете чего".

Цитата

GZep, простите меня, пожалуйста...

Вашей вины тут не вижу...Вы мне уже не раз помогали и давали ценные советы...

Так что? Какой-то вариант не рабочий? Либо из-за того, что сейчас утро я ничего не понимаю, либо я просто запутался...


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
GZep
Дата 7.11.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



Я так понял, что окончательный вариант - это вариант, который предложил всеми уважаемый SelenIT. Вот этот вариант, но только чуть-чуть переделанный мной, для повышения читабельности у "новичков" в javascript:
Код

if (typeof window.addEventListener != "undefined") {
    window.addEventListener ("click", function(e) {
        var t = e.target, c=t.attributes["confirm"];
        if (t.href && c && !confirm(c.value)) {
            e.preventDefault();
        }
    }, false);
} else if (typeof document.attachEvent != "undefined") {
    document.attachEvent("onclick", function() {
        var t = event.srcElement;
        return (!(t.href && t.confirm && !confirm(t.confirm)));
    });
}


Вот и все! smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
SelenIT
Дата 7.11.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



GZep, мой вариант в этом виде нерабочий, к сожалению (в частности, на примере Zeroglifа). Так что, даже идя по этому пути, совсем без циклов, похоже, не обойтись. Вот так, кажется, работает:
Код

function findLink(element) { // если клик внутри линка - найдем этот линк
  while(element.parentNode) {
    if (element.href) return element;
    element = element.parentNode;
  }
  return false;
}

if (typeof window.addEventListener != "undefined") {
  window.addEventListener("click", function(e) {
    var t = findLink(e.target), c=t.attributes["confirm"];
    if (t && c && !confirm(c.value)) e.preventDefault();
  }, true);
}
else if (typeof document.attachEvent != "undefined") {
  document.attachEvent("onclick", function() {
    var t = findLink(event.srcElement);
    return (!(t&&t.confirm&&!confirm(t.confirm)));
  });
}





--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 7.11.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

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



SelenIT, 
я решил (уже "по обычаю" ;) ) сделать тест. Долго не думая, взял свой "несерьезный" скрипт с предыдущей страницы, "нарисовал" на страничке 2340 ссылок, ну и запустил скрипт. Причем скрипт, проверяя каждую ссылку на наличие аттрибута title (был "по умолчанию" у ссылок - изобретать confirm не стал), для каждой (!) устанавливал обработчик события "click". 
В результате IE (рекордсмен) цикл в функции инициализации "пробегает" менее чем за 100mc, Opera ~ 150mc, а вот FF - от 800 до 1000mc. Т.е. "побочный" вывод - какие-либо операции в цикле у FF занимают на-а-амного больше времени. Ну а главный вывод - все-же можно использовать цикл для того, чтобы "пройтись" по коллекции document.links и назначить обработчики там, где нужно (как Вы и предлагали в аналогичной теме на Xpoint). 
Главное - поймите меня правильно. Тест - это не "камень" в ваш огород! Это просто тест, на основании которого можно (может быть каждому по-своему) делать какие-то выводы. 

PM MAIL   Вверх
12345c
Дата 7.11.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


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

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



Чтобы обойтись без циклов - отлавливайте все клики на документе. Затем проход от srcElement вверх по parentNode с поиском тегов <a>. Затем проверка на наличие подтверждения. Если всё есть, выводится.

Условно:
Код
<body onclick="var t=document.all?event.srcElement:event.target; while(t.tagName){if(t.getAttribute('confirm'))return confirm('Перейти на '+t.getAttribute('confirm')+' ?');t=t.parentNode;};">
<b>простой текст</b><br>
<a href=#1 confirm=a1>переход с подтверждением 1</a><br>
<a href=#2 confirm=a2><b>переход с подтверждением 2</b></a><br>
<a href=#3-perehod><b>переход без подтверждения</b></a><br>
<a name=456>тег без перехода</a>



--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
SelenIT
Дата 7.11.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



AKS, спасибо, интересные результаты. Правда, 8-10% "лисоводов" (включая меня) имхо все же заслуживают, чтобы с ними немного считались smile. Интересно, чем объясняется такая разница - предполагаю, что упрощенной схемой регистрации функций в IE и усложненной в FF (насколько я понял из поучительного теста Zeroglifа на dklab.ru). Навешивать обработчики циклом на document.links, безусловно, можно, единственное, что мне не нравится - то, что сделать это можно только после полной загрузки страницы со всей графикой и т.п. Глобальный перехват клика, по-моему, срабатывает и раньше (обязательно поправьте, если ошибаюсь!).

И все же интересно узнать Ваше мнение по моему последнему варианту глобального перехвата. Какие еще подводные камни на ровном месте я пропустил, и можно ли то же самое сделать проще/по-человечески?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AKS
Дата 7.11.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

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



SelenIT, вообще мнение мое такое - лучше сделать так:
Код

<a href='http://forum.vingrad.ru/' onclick='return confirm("Куда ты с Винграда, глупый?")' title=''>run out</a>

Ну а если уж взялись "изобретать" - тут уж, как говорится, кто на что горазд.
Если серьезно, то считается (не я так считаю, я об этом только читаю), что в программировании всегда есть несколько способов решения одной и той же задачи. У каждого решения найдутся свои недостатки. 
Цитата

И все же интересно узнать Ваше мнение 

У меня у самого вопросов больше, чем ответов ;) ...
PM MAIL   Вверх
AKS
Дата 7.11.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


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

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



SelenIT, вот еще "попытал" браузеры насчет:
Цитата

чем объясняется такая разница - предполагаю, что упрощенной схемой регистрации функций в IE и усложненной в FF...

 оставил такое условие в цикле (из своего скрипта):
Код

if((links[i].getAttribute('title') == '') ''

IE - 31ms, FF - 797ms. Да уж, "лисоводам" радоваться нечему ;)
PM MAIL   Вверх
SelenIT
Дата 7.11.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



AKS, насчет "лучше, как проще" - согласен полностью. Но иногда такую вещь нужно добавить динамически - например, напомнить юзеру, что он ввел что-то в форму, если он об этом забыл и вздумал уйти со страницы.

Насчет срабатывания глобального перехвата до полной загрузки - сейчас проверил, сделал длинную страницу разных ссылок (в т.ч. со внутренней разметкой и map-ов) и прогнал из-под IE через WebSpeedSimulator - работает, зараза (если, конечно, моим глазам еще можно верить)... но нутром чую, что я пропустил еще что-то архиважное, жду следующего отрезвляющего ушата холодной воды от глубокоуважаемого Zeroglifа...

Насчет скорости, сейчас проверил attributes['title'] вместо getAttribute('title') (думал, может вызов метода тормозит) - нет, обращение к коллекции еще медленнее  smile . Похоже на то, что мозиллисты (включая XPoint-овского корифея, чей злополучный пример я взял за основу) нарочно решили приучить всех писать без циклов smile

Это сообщение отредактировал(а) SelenIT - 7.11.2006, 18:32


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
GZep
Дата 8.11.2006, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


участник Винграда
***


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

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



12345c, предложил, по-моему, "очень даже ничего вариант"...Немог бы кто-нибудь сравнить его с финальным вариантом. Какой быстрее? Кто какой способ использует? Ну, и Ваше мнение...Очень интересно будет услышать... smile 


--------------------
user posted imageuser posted image
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




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


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

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