Обработка браузера собственным кликом перед домом: загружен - PullRequest
1 голос
/ 03 августа 2009

У меня проблема с собственными событиями Cross-Browser против событий CallBack.

У меня есть HTML-ссылка «Нажмите меня» с указанным href="". На dom:loaded я прикрепляю функцию к этой ссылке (чтобы сделать Ajax Stuff).

Код JavaScript загружается в конце страницы в соответствии с рекомендациями YSlow.

Выпуск

Если вы загрузите эту страницу очень быстро (нажав F5), нажмите на ссылку, затем

  • alert() не называется
  • ссылка идет (перезагрузка страницы)

Это происходит, когда сервер зависает. На самом деле страница еще не загружена, и браузер выполняет код.

Демо

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
  </head>
  <body>

    <a href="#toolate" id="action">Click Me</a>

    <!-- According to YSlow Recommandation load at the bottom -->
    <script src="../js/lib/prototype.js" type="text/javascript" language="JavaScript"></script>
    <script>
      /* <![CDATA[ */
      document.observe('dom:loaded', function() { 
        $('action').observe('click', function(event){ alert("click"); Event.stop(event); });
      });
      /* ]]> */
    </script>
  </body>
</html>

Повернись :

Поворот должен добавить onClick="return false;":

<a href="#toolate" id="action" onClick="return false;">Click Me</a>

Работает для лагов, но не для быстрого щелчка. И мне не нравится такой поворот, потому что моя цель - убрать onclick на всех <a href="">

С наилучшими пожеланиями

Ответы [ 3 ]

1 голос
/ 03 августа 2012

Мы провели множество тестов на нашей CMS во многих браузерах.

Сортировка по скорости:

  1. JavaScript не может быть выполнен до очень быстрого клика
  2. onclick = "return false" в большинстве случаев работает нормально
  3. JavaScript делает 2.) onLoad слишком медленный, но может быть достаточно
  4. Использование DIV в качестве щита приводит к другим проблемам и не является хорошим выбором
1 голос
/ 03 августа 2009

Вы можете посмотреть на это:

JQuery имеет небольшую удобную функцию, которая запускает ваш JavaScript, как только объектная модель документа готова… что происходит до того, как страница закончил загрузку.

$(document).ready(function(){   //
 Your code here... 
});

через

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

Не уверен, правильно ли я понял ваш вопрос, дайте мне знать, если не понял

0 голосов
/ 05 августа 2009

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

В этих случаях я предлагаю ссылку в следующем формате:

<a href="javascript:void(0);">Linktext</a>

Эта ссылка функционально не должна делать абсолютно ничего с включенным или отключенным JavaScript.

Важные замечания

  1. Число ноль в пустоте абсолютно необходимо. Internet Explorer будет жаловаться на иное.
  2. Использование «javascript: void (0);» Microsoft категорически не одобряет, потому что могут происходить странные вещи. Чтобы избежать большинства ошибок, не заключайте ничего, кроме текста в ваши ссылки void (0).
  3. Прежде чем принять решение, убедитесь, что тщательно продумали, добавляете ли "javascript: void (0);" действительно лучшее решение, чем добавление onclick, который возвращает false.

При удалении атрибута href:

Удаление атрибута href из ссылки является допустимым XHTML. Несмотря на то, что ваша ссылка является действительным XHTML, ваша ссылка потеряет свой автоматический стиль ссылки. Больше не нужно подчеркивать, не нужно больше цветов, больше не будет парения и больше нет автоматического изменения цвета при посещении ссылки.

Нельзя также устранить отсутствие стилей в CSS из-за нечеткой поддержки: hover в Internet Explorer.

...