Как загрузить скрипт jQuery последним?
Как сделать так, чтобы этот скрипт загружался последним?
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery("div.domTip_tipBody").mouseover(function(){
jQuery("#yyy a.tippy_link").css("background-color","yellow");});
jQuery("div.domTip_tipBody").mouseout(function(){
jQuery("#yyy a.tippy_link").css("background-color","red");
});
});
</script>
Он выполняется до того, как "div.domTip_tipBody" создается (который генерируется шорткодом), поэтому ничего не происходит.
Я пробовал:
<script src="script.js" type="text/javascript" defer="defer"></script>
в моем header.php перед
</head>
но это не помогает.
Видел "window.onload =", но не уверен, как его применить.
Буду признателен за любую помощь.
Спасибо
- Поместите код в файл с названием
your_name.js
. Добавьте следующий код в ваш файл
functions.php
:function wpse47618_load_script_last() { wp_enqueue_script( 'zzz_your_name', get_stylesheet_directory_uri().'your_name.js', array( 'jquery' ), '0', true ); } add_action( 'wp_enqueue_scripts', 'wpse47618_load_script_last', 99999 );
- Проверьте исходный код страницы, чтобы убедиться, что скрипт был успешно добавлен и путь к файлу указан верно. Если вы используете FireBug или другие инструменты разработчика, кликните по имени файла и проверьте, отображается ли содержимое скрипта.
- Готово.

Спасибо, Kaiser, это поместило скрипт внизу, но по какой-то причине js все еще не считывает селекторы, выводимые шорткодом, хотя со всем остальным он работает!

Не за что. Обрати внимание, что это уже вопрос для Stack Overflow. Я бы попробовал просто использовать консоль в FireBug/Chrome dev tools/IE dev tools и т.д. Просто напиши console.log( jQuery( 'div' ) );
и увидишь, сработал ли выбор элементов.

Kaiser, я не знал об этой функциональности, спасибо. При использовании я вижу следующие элементы: div#domTip_tipBox.domTip_Tip, div#this.tipHeader.domTip_tipHeader, div#this.tipBody.domTip_tipBody

Игнорируйте предыдущее. Кайзер, спасибо за ответ, я не знал об этой функциональности, благодарю. При её использовании я вижу эти элементы: div#domTip_tipBox.domTip_Tip, div#this.tipHeader.domTip_tipHeader, div#this.tipBody.domTip_tipBody
— при клике на них меня перенаправляет к CSS-селекторам. Я пробовал использовать "сырой" вывод выше и CSS-селекторы, на которые они ссылаются, но ни один из них не считывается моим JS. Можно ли что-то сделать, чтобы JS считывал эти селекторы?

Как я уже сказал: это вопрос для SO. Но в любом случае: если вы можете их выбрать там, значит, они работают. Вы также можете разместить console.log()
непосредственно в своём скрипте и посмотреть вывод в консоли. Это докажет, что скрипт работает. Тогда проблема в чём-то другом. Так что: попробуйте, и если не получится —> SO.

Похоже, это проблема делегирования событий в jQuery. Если новые DOM-элементы добавляются после загрузки страницы, jQuery их не увидит. Поэтому необходимо заранее указать jQuery привязать событие, если такой элемент существует сейчас или появится в будущем.
Попробуйте: $.delegate('div.domTip_tipBody','mouseover', function(e){
jQuery("#yyy a.tippy_link").css("background-color","yellow");});
});
Смотрите также: http://api.jquery.com/delegate/, http://lab.distilldesign.com/event-delegation/

Привет, Рашид, спасибо за ответ. Я надеюсь, что это решит мою проблему. Я попробовал это: add_action('wp_footer','myscript_in_footer'); function myscript_in_footer(){ ?>
$.delegate('p','mouseover', function(e){ jQuery("#yyy a.tippy_link").css("background-color","yellow");}); $.delegate('p', function(e){ jQuery("#yyy a.tippy_link").css("background-color","red"); }); });</script>
<?php
}
Я изменил "div.domTip_tipBody" на "p", чтобы проверить, работает ли функция, но она не работает. Можешь подсказать, что нужно изменить, чтобы она заработала?

Пожалуйста, прочитай этот вариант. Спасибо за ответ. Я надеюсь, что это решит мою проблему. Я попробовал это: add_action('wp_footer','myscript_in_footer'); <script type="text/javascript">
jQuery(document).ready(function(){ ?>
$.delegate('p','mouseover', function(e){ jQuery("#yyy a.tippy_link").css("background-color","yellow");}); $.delegate('p', function(e){ jQuery("#yyy a.tippy_link").css("background-color","red"); }); });</script>
<?php
}
Я изменил "div.domTip_tipBody" на "p", чтобы проверить, работает ли функция, но она не работает. Можешь подсказать, что нужно изменить, чтобы она заработала?

Вы можете просто добавить скрипт в footer.php, и он, скорее всего, будет работать, но это не лучший способ избежать конфликтов с jQuery.
Лучший способ — подключить скрипт из отдельного файла с помощью функции wp_enqueue_script
. См. http://codex.wordpress.org/Function_Reference/wp_enqueue_script, где указан параметр для загрузки скриптов в футере через wp_footer
.
Также ознакомьтесь с руководством для разработчиков по бесконфликтным JavaScript и CSS в WordPress: http://wp.smashingmagazine.com/2011/10/12/developers-guide-conflict-free-javascript-css-wordpress/

add_action('wp_footer','myscript_in_footer');
function myscript_in_footer(){
?>
<script type="text/javascript">
jQuery(document).ready(function(){
// При наведении мыши на подсказку
jQuery("div.domTip_tipBody").mouseover(function(){
// Изменяем цвет фона ссылки на желтый
jQuery("#yyy a.tippy_link").css("background-color","yellow");});
// При уходе мыши с подсказки
jQuery("div.domTip_tipBody").mouseout(function(){
// Возвращаем красный цвет фона ссылки
jQuery("#yyy a.tippy_link").css("background-color","red");
});
});
</script>
<?php
}

Спасибо, Раджив, я попробовал ваш код, и он помещает js внизу, теперь у меня есть два способа сделать это. Js по-прежнему не работает на выводе моего шорткода, так что проблема, должно быть, в чем-то другом.

Возможно, это немного запоздало, но на всякий случай, если кто-то все еще ищет решение:
http://css-tricks.com/snippets/jquery/run-javascript-only-after-entire-page-has-loaded/
Красивый и простой способ сделать это!
