Отправляет email-рассылки с помощью сервиса Sendsay

[TC] JavaScript: случайный вывод текста

Hello, World!
Спецы по JS, проконсультируйте, если будет время.
Ситуация такая: на некой странице имеется скрипт, который должен выводить случайным
образом один абзац текста из некого списка готовых вариантов (код приведу ниже).
У меня при тестировании на Internet Explorer 8, FireFox 3.6.3, Lunascape 6 и
Google Chrome последней версии, уж не помню какой, всё работает. Однако один
умник с IE 6 мне заявляет, что у него ничего не выводится.
Возможно дело в том, что я где-то нарушил спецификацию JS, поэтому некоторые
браузеры не отрабатывают моё ваяние. Вод мой код, возможно подскажите, в чём
может быть дело:
<script type="text/javascript">
<!--
var a=Math.round(Math.random()*2)
text = new Array();
text[0]='<p>Текст ?1</p>'
text[1]='<p>Текст ?2</p>'
text[2]='<p>Текст ?3</p>'
document.write (text[a]);

</script>
Есть ли тут фактические ошибки? Или мне просто посоветовать тому пользователю
приделать руки? :)
Заранее спасибо откликнувшимся.
P.S. Я специально для этого человека делал индикатор типа <noscript>Привет дурак!</noscript>.
Говорит, что ничего не увидел, так что скрипты у него вроде включены.

Ответить   Tue, 1 Jun 2010 15:00:38 +0400 (#1093939)

 

Ответы:

Vande omentaina, newsmailing!

пошлите его на сайт Майкрософта, пусть обновится до IE8 и не пудрит
вам мозги)
Многие сайты вообще отказываются от поддержки IE6. К таким сайтам
относятся и наши проекты, например)

Ответить   Wed, 2 Jun 2010 01:45:04 +0300 (#1094511)

 

Приветствую всех.

У меня на IE6 скрипт отрабатывает.
И IE6 все-таки присутствует возможность получать сообщения об ошибках в скриптах
(при включении соответствующей опции).

Массив можно инициализировать так:
text = new Array(
'<p>Текст ?1</p>',
'<p>Текст ?2</p>',
'<p>Текст ?3</p>'
);

И вычисление индекса можно поставить после инициализации массива примерно в таком
виде:
var a=Math.round(Math.random()* (text.length-1));
Это позволит исключить потенциальные грабли, если вы захотите увеличить количество
текстовых фрагментов.

Успехов. Анатолий.

Ответить   "i_chay" Wed, 2 Jun 2010 15:03:21 +0400 (#1095153)

 

Здравствуйте, Анатолий.

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

А в чём недостаток моего варианта в условиях значительного увеличения числа
объектов выбора? В увеличении времени обработки?
Фишка делалась как раз для функции типа совет дня, так что вопрос большой
базы актуален.
Зарание спасибо.

Ответить   Wed, 2 Jun 2010 17:00:34 +0400 (#1095192)

 

Приветствую всех.

В отличие от вашего варианта, предлагаемый вариант вычисляет наибольший индекс
элемента массива автоматически (метод .length возвращает количество элементов
в массиве).

В вашем варианте, чтобы добавить новый текстовый фрагмент, нужно сделать две
операции:
1. Добавить новый фрагмент текста в массив text.
2. Исправить множитель в выражении, которое вычисляет случайный индекс .

Чтобы не выполнить первый пункт, надо обладать изрядным талантом. А вот чтобы
не выполнить второй пункт (или ошибиться при ручном подсчете элементов массива),
никаких особых талантов не надо (особенно если впоследствии между инициализацией
массива и вычислением случайного индекса у вас появятся новые строки кода) .
В моем варианте достаточно выполнить лишь п.1, а п.2. выполняется самим скриптом.

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

Если есть поддержка со стороны серверных скриптов (php, perl,etc.), то можно
использовать ajax или iframe, чтобы не включать в код страницы большие массивы
текстов (из которых фактически нужен только один).
Если поддержки со стороны сервера нет, то массив текстов можно вынести в отдельный
js-файл. Поскольку, как правило, браузер кеширует такие файлы, то массив будет
загружен один раз, а не каждый раз при обновлении страницы.
А вот когда вы поместите массив в отдельный файл, то шансы забыть про п.2. (см.
выше) резко возрастут.

Успехов. Анатолий.

Ответить   "i_chay" Wed, 2 Jun 2010 19:16:30 +0400 (#1095447)