Как загрузить скрипт jQuery последним?

2 апр. 2012 г., 06:30:34
Просмотры: 20.7K
Голосов: 2

Как сделать так, чтобы этот скрипт загружался последним?

<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 =", но не уверен, как его применить.

Буду признателен за любую помощь.

Спасибо

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

Используйте wp_footer, чтобы разместить это в подвале сайта. Подробнее читайте: http://codex.wordpress.org/Plugin_API/Action_Reference/wp_footer

Rutwick Gangurde Rutwick Gangurde
2 апр. 2012 г. 06:35:01
Все ответы на вопрос 5
5
  1. Поместите код в файл с названием your_name.js.
  2. Добавьте следующий код в ваш файл 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 );
    
  3. Проверьте исходный код страницы, чтобы убедиться, что скрипт был успешно добавлен и путь к файлу указан верно. Если вы используете FireBug или другие инструменты разработчика, кликните по имени файла и проверьте, отображается ли содержимое скрипта.
  4. Готово.
2 апр. 2012 г. 07:09:37
Комментарии

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

xyz xyz
2 апр. 2012 г. 17:11:14

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

kaiser kaiser
2 апр. 2012 г. 17:13:20

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

xyz xyz
2 апр. 2012 г. 19:39:21

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

xyz xyz
2 апр. 2012 г. 19:48:24

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

kaiser kaiser
2 апр. 2012 г. 21:11:46
2

Похоже, это проблема делегирования событий в 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/

3 апр. 2012 г. 16:31:55
Комментарии

Привет, Рашид, спасибо за ответ. Я надеюсь, что это решит мою проблему. Я попробовал это: 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", чтобы проверить, работает ли функция, но она не работает. Можешь подсказать, что нужно изменить, чтобы она заработала?

xyz xyz
3 апр. 2012 г. 22:13:07

Пожалуйста, прочитай этот вариант. Спасибо за ответ. Я надеюсь, что это решит мою проблему. Я попробовал это: 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", чтобы проверить, работает ли функция, но она не работает. Можешь подсказать, что нужно изменить, чтобы она заработала?

xyz xyz
3 апр. 2012 г. 22:20:18
1

Вы можете просто добавить скрипт в 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/

2 апр. 2012 г. 06:58:17
Комментарии

Спасибо, songdogtech, все ссылки помогли мне лучше разобраться, я это ценю. Мне придётся изучить js и шорткод, так как js не считывает вывод моего шорткода.

xyz xyz
2 апр. 2012 г. 17:11:33
2
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
}
2 апр. 2012 г. 09:56:29
Комментарии

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

xyz xyz
2 апр. 2012 г. 17:11:26

Просто вставлять это в футер — неправильный способ сделать это.

kaiser kaiser
24 апр. 2012 г. 21:41:59
0

Возможно, это немного запоздало, но на всякий случай, если кто-то все еще ищет решение:

http://css-tricks.com/snippets/jquery/run-javascript-only-after-entire-page-has-loaded/

Красивый и простой способ сделать это!

29 окт. 2013 г. 17:38:21