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

Поиск:

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


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


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

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



Вот, написал небольшой, но думаю очень полезный скрипт.

Вставляем в страницу код javascript:
Код

window.onload=function() {
    content_links = document.getElementsByTagName('a');
    for(i=0; i<content_links.length; i++) {
        if (content_links[i].getAttribute('confirm')) {
            content_links[i].onclick = function () {
                if (!confirm(this.getAttribute('confirm'))) {
                    if (document.all) {
                        event.returnValue = false;
                    } else {
                        event.preventDefault();
                    }
                }

            }
        }
    }
}


Теперь создаем html ссылки:

<a href="index.html" confirm="Вы действительно хотите перейти по ссылке?">index</a>
<a href="new.html" confirm="Вы действительно хотите перейти к new.html?">new</a>


Соответственно все ссылки на странице со скриптом (если они имеют атрибут confirm) будут запрашивать подтверждение при переходе. Если атрибут confirm отсутствует(например:<a href="new.html">new</a>), то будет происходить обычный переход, без всяких вопросов...
Другие атрибуты типа target на ход выполнения скрипта повлиять не смогут...

Вот и все! smile 


M
12345c
Похожая тема: http://forum.vingrad.ru/topic-86395.html - "Как сделать ссылки с подтверждением".


Это сообщение отредактировал(а) 12345c - 7.11.2006, 16:53
PM MAIL WWW ICQ Skype GTalk   Вверх
vasac
Дата 5.11.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Забавно, конечно, но не работает.
Во-первых document.body до onload может быть еще не определен — перехватчик нужно вешать на window.
Во-вторых при отказе пользователя делается ветвление на ie/gecko, но в то же время в обоих ветках используется event, определенный только для IE.
Для зачета требуется доработка. )
PM WWW   Вверх
GZep
Дата 5.11.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата

Во-первых document.body до onload может быть еще не определен

Доработал.
Цитата

определенный только для IE.

В опере работает. Поточнее скажи, как можно апгрейдить.

Это сообщение отредактировал(а) GZep - 5.11.2006, 14:16


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


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


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

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



То же самое (за основу взят пример с Xpoint):
Код

if (typeof window.addEventListener != "undefined") {
  // Browser with DOM suport - навешиваем обработчик по стандарту DOM на все окно
  window.addEventListener("click", function(e) {
    // рассмотрим целевой объект клика и его атрибут confirm (если есть)
    var t = e.target, c=t.attributes["confirm"];
    /* если есть атрибут href (ссылка или map), и есть наш атрибут, и на предложение перейти юзер ответил "нет",
            то блокируем действие по умолчанию;
       если какое-то из этих условий не выполнилось, то ничего не делаем */
    if (t.href && c && !confirm(c.value)) e.preventDefault();
  }, false); // последний аргумент - фаза, на которой перехватываем событие
}
else if (typeof document.attachEvent != "undefined") {
  // Stupid IE - не понимает по стандарту, навешиваем обработчик на документ и по-микрософтовски)
  document.attachEvent("onclick", function() {
    // тоже смотрим целевой объект
    var t = event.srcElement;
    // IE автоматом превращает атрибуты в свойства - используем это для сокращения записи,
    // смысл тот же, что в "стандартной" ветке
    return (!(t.href&&t.confirm&&!confirm(t.confirm)));
  });
}

GZep, все-таки любите Вы циклы там, где без них куда удобнее...

Это сообщение отредактировал(а) SelenIT - 5.11.2006, 15:13


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


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


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

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



SelenIT, извините, но не совсем все понятно в коде... smile немогли бы Вы облагородить код комментариями...

P.S. обожаю циклы, они такие...эээ...бесконечные... smile 

P.S.(2) а ИЕ правда "Stupid", т.е. тупой?


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


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


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

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



GZep, комментарии вписал (попутно одну строчку еще компактнее сделал). А по поводу IE... первоначальные комменты остались от оригинального примера, возможно, автор немного пристрастен (хотя и невероятно компетентен), но необходимость поддерживать несколько веток кода и эмулировать стандартные возможности обходными путями несколько утомляет. Хотя у IE есть и свои полезные фичи, которые, наверное, стоило бы внести в официальный стандарт... но это уже тема для флейма и холивора)


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


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


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

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



  • Переменные, конечно, прикольно названы (по одной букве латинского алфавита и ничего не говорят о своих значениях, для чего они). Это не главное, но код трудно понять... smile 
  • Хотелось бы знать, какой способ более экономичен для системных ресурсов. Мой, с циклом, или этот, который учитывает полоумность ИЕ. Так какой?
  • Мой вариант работает и в ИЕ и в опере. Не знаю, за что его так хаить можно...
  • Вариант с Xpoint надо заносить в window.onload?
 smile 

Это сообщение отредактировал(а) GZep - 5.11.2006, 17:42


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


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


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

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



GZep,
  • Переменные - просто псевдонимы для target/srcElement события (первая буква от target) и атрибута confirm (тоже первая буква), в дальнейшем они не меняются, используются в основном именно для сокращения записи.
  • Я считаю, что экономичнее этот, где используется один экземпляр функции на все клики вместо множества клонов - по количеству ссылок. Кроме того, он не "убивает" другие обработчики onclick, если таковые уже прописаны.
  • Приведенный мной вариант работает в IE, Gecko, Opera (вне зависимости от того, чем она представляется). Ваш вариант по-своему неплох, но все же менее универсален (см. выше).
  • Заносить в onload ничего не надо - приведенный код самодостаточен и начинает работать сразу в момент включения (по-моему, даже не дожидаясь полной загрузки, в т.ч. в IE).


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


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


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


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

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



Ну, что тут сказать... smile ...наверное, все-таки ваш вариант получше будет. Я просто подумал, если на странице будет больше 50 линков, то мой скрипт даст о себе знать через "тормоза". Спасибо. smile 


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


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


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

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



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

Это сообщение отредактировал(а) GZep - 5.11.2006, 19:37


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


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


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

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



GZep, я сам далеко не волшебник и еще многому учусь (в т.ч., как оказывается, достаточно базовым вещам). Просто когда появляются новые возможности, позволяющие сделать что-то более красиво и оптимально - хочется научиться использовать их по-полной. Правда, Javascript (и еще в большей мере CSS) - такая вещь, что новое часто бывает неуниверсальным, поэтому часто приходится идти на компромиссы... но в конце концов прогресс не стоит на месте, равняться, по-моему, следует на новое, а не на поддержку "динозавров"...


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


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


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

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



GZep, 
Цитата

Вся проблема в том, что моего уровня знаний нехватает...

Да не проблема это вовсе! Уровень поднимется - не успеете оглянуться! Чего я, кстати, всем желаю (т.е. поднятия уровня)! Себя не забуду - себе я желаю этого в первую очередь! ;)
Я тут попробовал написать чуть-чуть по-другому. Не совсем серьезно, типа по-модному - сейчас же в "ходу" всякие-разные "библиотечные" варианты, ООП и все-такое. Короче говоря - сделал вот таким объектом (на самом деле - то же, что и в первом варианте этой темы):
Код

({init_links : function() {
    var links = document.links, fn = this.add_handler,
    hd = this.confirm_transit, item;
    for(var i = 0, l = links.length; i < l; i++) {
      if((item = links[i]).getAttribute('confirm')) fn(item, 'onclick', hd);
    }
  },   
  confirm_transit : function(e) {
    var el = e.srcElement || this, c;
    while(!(c = el.getAttribute('confirm'))) el = el.parentNode;
    if(!confirm(c)) (e.preventDefault) ? e.preventDefault() : e.returnValue = false;
  },
  add_handler : function(o, e, f) {
    f = f || (function(a) { return function() { a.init_links(); }})(this);
    (o.attachEvent) ? o.attachEvent(e, f) : (o.addEventListener) ? 
      o.addEventListener(e.substr(2), f, !1) : '';
  }
}).add_handler(window, 'onload');


Это сообщение отредактировал(а) AKS - 6.11.2006, 21:33
PM MAIL   Вверх
SelenIT
Дата 6.11.2006, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



AKS, по-моему, отлавливать ссылки через getElementsByTagName('a') слегка неудобно: не все теги A - ссылки, и не всё, что действует как  ссылки - теги A (бывают еще map + area, я сам в молодости ими, признаться, злоупотреблял). ИМХО проверка наличия атрибута href как-то понадежнее... Хотя могу в этом и заблуждаться.


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


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


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

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



SelenIT, 
Цитата

отлавливать ссылки через getElementsByTagName('a') слегка неудобно...

Наверно... Можно попробовать так (в попытке достичь чуть большего "удобства" ;) ):
Код

var links = document.links;

PM MAIL   Вверх
GZep
Дата 6.11.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Спасибо. Я долго думал, какой вариант предпочтительней, мой, или тот, что предложил SelenIT. В общем, все-таки как тут не крути, но циклом присваевать всем ссылкам с атрибутом confirm функцию при нажатии гораздо менее удобнее чем просто отлавливать переходы по ссылкам. Все, я сдаюсь и циклы в подобных ситуациях признаю неприемлимыми. smile 


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


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


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

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



GZep, тот вариант, к сожалению, не финальный - он не учитывает замечания Zeroglifа. Учитывает его (надеюсь) мой последний вариант, с функцией findLink. Признаться, мне самому кажется, что мой последний вариант учитывает все, что можно (кроме поддержки ископаемых браузеров), но... в прошлый раз я тоже так думал))

Вариант 12345c реализует примерно ту же идею, что моя ф-ция findLink, только вообще не проверяет, является ли тег ссылкой - только на наличие атрибута confirm. В этом и его сила (можно без изменений применять не только для ссылок, но и, к примеру, для кнопок), и слабость (например, если верстальщик или шаблонный движок заменил ссылку на якорь, а атрибут оставил - confirm выскочит, а перехода ес-но не произойдет). Кроме того, он будет работать в большем количестве браузеров (в т.ч. старых), нежели мой "навороченный" вариант, зато не позволяет навешивать на body другие обработчики onclick (хотя вряд ли они понадобятся...).

12345c, имхо проверять поддержку srcElement по document.all как-то неправильно... по-моему, в последних FF document.all поддерживается, а srcElement пока нет...


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


Круглый
****


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

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



Цитата(SelenIT @  8.11.2006,  14:24 Найти цитируемый пост)
в последних FF document.all поддерживается
да, но традиционно даёт false, чем спокойно продолжаем пользоваться. Это, как видно, сознательно установлено разработчиками как признак Гекко.

Пример я написал приблизительный, чтобы показать идею. Если надо аттачить несколько обработчиков, пишем другую функцию (добавление обработчика).

PM WWW   Вверх
SelenIT
Дата 8.11.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(12345c @  8.11.2006,  15:18 Найти цитируемый пост)
document.all ... традиционно даёт false, чем спокойно продолжаем пользоваться. Это, как видно, сознательно установлено разработчиками как признак Гекко.


12345c, спасибо, я этого не знал. Но имхо деление "IE vs. W3C-совместимые" все же актуальнее...


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


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


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

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



Вы про вот это замечание говорите?
Код

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

Я не могу понять, почему он не должен работать? Подумаешь, что ссылка жирная и другого цвета...разве велика беда? smile 


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


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


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

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



GZep, к сожалению... target-ом в таком случае будет не тег A с атрибутами href и confirm (под кот. "заточена" проверка), а вложенный тег, поэтому условие не выполнится. Беда, в принципе, не велика, просто надо проверять не только сам target, но и его родительские элементы (что и делают мой обновленный вариант и вариант 12345c).


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


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


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

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



Цитата(SelenIT @ 8.11.2006,  19:06)
GZep, к сожалению... target-ом в таком случае будет не тег A с атрибутами href и confirm (под кот. "заточена" проверка), а вложенный тег, поэтому условие не выполнится. Беда, в принципе, не велика, просто надо проверять не только сам target, но и его родительские элементы (что и делают мой обновленный вариант и вариант 12345c).

А в вариантах, где присваевается прослушиватель на "onclick" там надо выполнять праверку родительских элементов?


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


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


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

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



Нет, в тех вариантах ничего дополнительно проверять не надо.

Это сообщение отредактировал(а) SelenIT - 10.11.2006, 15:10


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


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


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

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



Так какой вариант "самый-самый" будет. Я просто уже немного запутался smile Какая проблема, в каком варианте актуальна?


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


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


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

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



Цитата(GZep @  10.11.2006,  15:50 Найти цитируемый пост)
какой вариант "самый-самый" будет

Боюсь, что я, будучи в числе "конкурсантов", не могу ответить на этот вопрос объективно и беспристрастно smile Про плюсы и минусы всех вариантов в теме говорилось вроде немало, но опять же, я могу преувеличивать одни из них и недооценивать другие...


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


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


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

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



А на какие типы их можно разделить?
  • Прослушивают нажатия на ссылку и если в ней есть атрибут confirm, выводят вопрос.
  • Проходятся циклом по ссылкам и, если у них есть атрибут confirm, присваевают им действия при нажатии.
Я верно поделил варианты на "2 фронта"?


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


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


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

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



По сути верно. Только по первому "фронту" уточнение - они прослушивают любой клик (в пределах окна), и если этот клик пришелся по ссылке с атрибутом - выводят вопрос.


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


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


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

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



Так, получается, что первый "фронт" более удобен для большого количества ссылок (не тратися время на цикл и место в оперативке на добавление событий для каждой ссылки), а второй для небольшого количества (в нем не будет прослушиваться каждый клик, а только те, что по ссылкам с атрибутом "confirm"). Мне больше первый нравиться. Или я опять что-то не учёл? smile 

Это сообщение отредактировал(а) GZep - 10.11.2006, 20:37


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


 




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


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

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