Автоматическое перенаправление с помощью JavaScript в WordPress

#javascript #wordpress

#javascript #wordpress

Вопрос:

Я годами использую приведенный ниже скрипт на html-сайте без проблем, но по какой-то причине я не могу заставить его работать в WordPress. После выбора в раскрывающемся списке он должен немедленно перенаправить посетителя на новый URL, но в WP ничего не происходит — он просто сидит там. Вот живая, нерабочая страница: http://www.lawlessfrench.com/subjunctivisor /

И вот скрипт (с удаленной кучей опций):

 <Script language="JavaScript">
<!-- Script courtesy of http://www.web-source.net - Your Guide to Professional Web Site Design and Development
function goto(form) { var index=form.select.selectedIndex
if (form.select.options[index].value != "0") {
location=form.select.options[index].value;}}
//-->
</SCRIPT>
<FORM NAME="form1">
<SELECT NAME="select" ONCHANGE="goto(this.form)" SIZE="1">
<option value="">Choose a verb or expression</option>
<option value="http://www.lawlessfrench.com/subjunctivisor/accepter/">accepter que</option>
<option value="http://www.lawlessfrench.com/subjunctivisor/vouloir/">vouloir que</option>
<option value="http://www.lawlessfrench.com/subjunctivisor/il-est-vrai/">vrai (il est / c'est)</option>
</select>
</form>
 

Комментарии:

1. Научитесь использовать консольный инструмент, такой как Firebug для Firefox, или инспектор в Chrome или Firefox, для просмотра / тестирования вашего сайта. Ваш сайт выдает ошибки javascript со скоростью около 50 в секунду. Никакой javascript не будет работать на этой странице, пока он не будет исправлен.

Ответ №1:

Это стандартный способ ведения дел в WP.

1. Сначала зарегистрируйте свой скрипт с wp_register_script() помощью, смотрите ссылку для получения дополнительной информации

http://codex.wordpress.org/Function_Reference/wp_register_script

2. Далее вы должны поставить свой скрипт в wp_enqueue_script() очередь, смотрите здесь для получения дополнительной информации

http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Для этого вы должны поместить свой встроенный js в отдельный файл .js. Также помните, что если вы зарегистрировали скрипт, то позже вам нужно будет только указать дескриптор в функции постановки в очередь. т.е.

wp_enqueue_script( 'name_of_registered_script' );

Комментарии:

1. Я попробовал это, но столкнулся с той же проблемой, поэтому вернулся к простому размещению js прямо на странице, чтобы упростить устранение неполадок.

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

3. Он автономный и предназначен только для одной страницы.

4. Да, это не имело никакого значения.

Ответ №2:

Я проверил ваш скрипт на js fiddle, и он определенно работает. Вот ссылка для теста: http://jsfiddle.net/d9DzK /

На вашем живом сайте при изменении выбора появляется ошибка «функция перехода не определена». Вы четко определили функцию, хотя:

 function goto(form) { var index=form.select.selectedIndex
if (form.select.options[index].value != "0") {
location=form.select.options[index].value;}}
 

Итак, я предполагаю, что 2 ошибки, которые появляются в консоли javascript после загрузки страницы, нарушают работу javascript. Глядя на строку, которая выдает ошибку, я считаю, что это из-за того, как вы включили скрипт в свой шаблон.

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

Попробуйте изменить это:

 <p><Script language="JavaScript"><br />
 

К этому:

 <Script language="JavaScript"><br />
 

Если это не устраняет проблему, скорее всего, виновником по-прежнему является неработающий объект html.

Комментарии:

1. Спасибо. Я был удивлен вашим комментарием, и, конечно же, когда я посмотрел на свой код, там не было тега <p> — по-видимому, он добавляется темой. Я играю с этим (например, добавляя фактические теги <p> и </p>), но пока безуспешно.

2. @lkl Это могут быть другие ошибки javascript. Ваш script.js файл отсутствует }); в конце. У вас есть это один раз, но оно нужно снова.

3. @lkl Каким было окончательное решение?

4. Я не смог заставить его работать, поэтому я просто поместил его на обычную HTML-страницу, а не в сообщение в блоге.