#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-страницу, а не в сообщение в блоге.