Как отключить AJAX-y ссылки, прежде чем страница Javascript готова их обработать? - PullRequest
2 голосов
/ 11 февраля 2009

Я реализую корзину для своего веб-сайта, используя псевдо-AJAX Lightbox-esque эффект. (Он фактически не вызывает сервер между запросами - все просто магия прототипа для обновления отображаемых значений.)

Для пользователей, не имеющих Javascript, существует также полу-грациозное аварийное поведение: если они нажимают «добавить в корзину», они попадают в корзину (удаленное, менее желаемое взаимодействие).

Однако, пользователь с включенным Javascript, который загружает страницу, а затем сразу же нажимает добавить в корзину, также уходит со страницы. Я хотел бы, чтобы Javascript просто задержал их на некоторое время, а затем выполнил поведение show cart, как только оно будет готово. В качестве альтернативы просто жизненно важно полностью игнорировать щелчки до того, как Javascript будет готов.

Есть предложения?

Ответы [ 4 ]

3 голосов
/ 11 февраля 2009

Теперь я делаю это с помощью jQuery b / c. Я смутно припоминаю различия в браузерах, о которых заботится jQuery:

Попробуйте

$ (документ) .ready (function () { // положи сюда все свои достоинства jQuery. });

1 голос
/ 11 февраля 2009

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

Но чтобы ответить на исходный вопрос, вы можете отключить ссылки в обычном коде, а затем снова включить их с помощью вызова document.observe("dom:loaded", function() { ... }).

0 голосов
/ 11 февраля 2009

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

Когда вы запускаете свои скрипты? Если вы используете документ onload, он будет ждать загрузки всех изображений перед инициализацией, что действительно даст пользователю возможность щелкнуть мышью на покупку.

Если вы запускаете расширение JS, когда DOM готов, либо просто поместив свой внизу страницы, либо с помощью события в стиле DOMContentLoaded, предоставляемого вашей платформой, ссылки должны адаптироваться достаточно быстро, пользователь вряд ли сначала нажмет кнопку.

Если вы действительно хотите отложить клики, которые помещаются между первым анализируемым элементом и загружаемым документом, вы можете написать что-то вроде:

<script>
    function methodcall(obj, name) {
        return function() {
            obj[name].call(obj);
        };
    }
</script>
...
<a href="nonjsversion" onclick="setTimeout(methodcall(this, 'click'), 500); return false;">Buy</a>
...

Так что он будет просто вращаться там, опрашивая (а в IE - утечка памяти), пока не будет создан обработчик реальных щелчков ссылки. Это довольно некрасиво и хрупко в том смысле, что если ваш скрипт по какой-то причине ломается (и это JavaScript, так что вполне вероятно, что в какой-то момент, в каком-то браузере это произойдет), ваша кнопка сломается. Эта проблема относится ко всем потенциальным решениям, основанным на более поздней версии JavaScript, включающей ранее отключенные действия.

И нет ничего хуже для бизнеса, чем сломанная кнопка покупки.

0 голосов
/ 11 февраля 2009

Вы можете попробовать скрыть ссылки в css, а затем показать их при загрузке страницы.

<script type="text/javascript">
  document.write('<link rel="stylesheet" type="text/css" href="someCssThatHidesLinks.css" />');

  window.onLoad = function() {
    //show links
  }

</script>

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

...