Jquery работает только в header.php - PullRequest
0 голосов
/ 04 апреля 2011

Я читаю все, что могу на jQuery, но на этой неделе мне нравится (нужно) закончить веб-сайт, и я могу найти решение этой проблемы за последние восемь часов.

Настройка

Я использую тему ajaxed wp, которую я настраиваю по своему вкусу.

Задача

Я написал простую функцию для изменения изображения заголовка и текста заголовка при нажатии на основные навигационные ссылки.

Функция работает в header.php, но не работает на пользовательской главной странице (main_navp.php), которую я включил в index.php. На navp.php при нажатии на изображение появляется то же самое, что и на панели навигации.

index.php

</p>

<pre><code><?php get_header(); ?>

 <div id="main-content"><div id="inside">

 <?php get_template_part('main_navp'); ?>

 <?php if// HERE IS THE WP LOOP (not used so left out) //?>

<div class="pagination">
   <span class="older"><?php next_posts_link('&laquo; Older Entries') ?></span>
 <span class="newer"><?php previous_posts_link('Newer Entries &raquo;') ?></span>
 </div>``

<?php else : ?>

<h1>no posts...</h1>

<?php endif; ?>

</div></div>

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Функция включена в header.php в .. head>

<script type="text/javascript">     
        $(document).ready(function() 
        {

            $("a[title='Gigs']").click(function()
            {
            $("#main_logo").css("background-image","url(<?php bloginfo('stylesheet_directory'); ?>/images/header/gig_header_flip.png)");
            $("a#nav_text").html("Gigs");

            });


            $("a[title='Bio']").click(function()
            {
            $("#main_logo").css("background-image","url(<?php bloginfo('stylesheet_directory'); ?>/images/header/play_header.png)");
            $("a#nav_text").html("Biography");

            });

            $("a[title='Gitaarles']").click(function()
            {
            $("#main_logo").css("background-image","url(<?php bloginfo('stylesheet_directory'); ?>/images/header/les_header.png)");
            $("a#nav_text").html("Gitaarles");

            });


            $("p[id='les_mp']").live("click", function()
            {
            $("#main_logo").css("background-image","url(<?php bloginfo('stylesheet_directory'); ?>/images/header/les_header.png)");
            $("a#nav_text").html("Gitaarles");

            });


            $("li[id='homew']").click(function()
            {
            $("#main_logo").css("background-image","url(<?php   bloginfo('stylesheet_directory'); ?>/images/header/header_arty.png)");
            $("a#nav_text").html("Home");

            });


        });


        </script>

В main_navp.php (входит в index.php после header.php) функция не работает с этим элементом. Но это должно быть вызвано $("p[id='les_mp']").live("click", function(), как показано выше.

   <div id="boxred_b">

  <div class=head_box><a>Gitaarles</a></div>

      <p class="homeles" id="les_mp">
       <a href="/gitaarles"><img src="<?php bloginfo('stylesheet_directory'); ?>/images/les_mp.jpg" /></a>
      </p>

Основной jquery вызывается в header.php

<script src='<?php bloginfo('template_directory'); ?>/js/jjquery-1.5.2.min.js'></script>

В footer.php находятся все остальные функции jquery.

 <!-- http://benalman.com/projects/jquery-urlinternal-plugin/ -->
<script src='<?php bloginfo('template_directory'); ?>/js/jquery.ba-urlinternal.min.js'></script>

    <!-- http://www.asual.com/jquery/address/ -->
    <script src='<?php bloginfo('template_directory'); ?>/js/jquery.address-1.3.2.min.js'></script>

    <script>

        // Original JavaScript by Chris Coyier
        // Updated October 2010 by Stewart Heckenberg & Chris Coyier

        $(".home li.home").removeClass("home").addClass("current_page_item");
        $("#column-wrap").append("<img src='<?php bloginfo('template_directory'); ?>/images/ajax-loader.png' id='ajax-loader' />");

        $("#s").focus(function() {
            if ($(this).val() == "Search...") {
                $(this).val("");
            }
        });

        if ($(".widget_categories li").length%2 != 0) {
            $(".widget_categories ul").append("<li><a>&nbsp;</a></li>");
        }

        if ($(".widget_tag_cloud a").length%2 != 0) {
            $(".widget_tag_cloud").append("<a>&nbsp;</a>");
        }

        // The reason this JavaScript is in footer.php instead of its own file is basically the next line.
        var base             = '<?php bloginfo('url'); ?>',
            $mainContent     = $("#main-content"),
            $ajaxSpinner     = $("#ajax-loader"),
            $searchInput     = $("#s"),
            $allLinks        = $("a"),
            $el;

        $('a:urlInternal').live('click', function(e) { 

            $el = $(this);

            if ((!$el.hasClass("comment-reply-link")) && ($el.attr("id") != 'cancel-comment-reply-link')) {         
                var path = $(this).attr('href').replace(base, '');
                $.address.value(path);
                $(".current_page_item").removeClass("current_page_item");
                $allLinks.removeClass("current_link");
                $el.addClass("current_link").parent().addClass("current_page_item");
                return false;
            }

            // Default action (go to link) prevented for comment-related links (which use onclick attributes)
            e.preventDefault();

        });  

        $('#searchform').submit(function() {  
            var s = $searchInput.val();
            if (s) {
                var query = '/?s=' + s;
                $.address.value(query);  
            }
            return false;
        });  

        $.address.change(function(event) {  
            if (event.value) {
                $ajaxSpinner.fadeIn();
                $mainContent
                    .empty()
                    .load(base + event.value + ' #inside', function() {
                        $ajaxSpinner.fadeOut();
                        $mainContent.fadeIn();
                    });  
            } 

            var current = location.protocol + '//' + location.hostname + location.pathname;
            if (base + '/' != current) {
                var diff = current.replace(base);
                location = base + '/#' + diff;
            }

        });                 

    </script>

  </div>

Я старался сделать вещи максимально короткими. Если вам нужна дополнительная информация, пожалуйста, спросите.

-обновление

Использование живой функции в заголовке, похоже, не решает проблему. Я использую XAMPP для локального запуска сайта. Если это поможет, я могу сделать установку wp онлайн или предоставить источник веб-сайтов (html / java).

Ответы [ 3 ]

0 голосов
/ 04 апреля 2011

Я пытался использовать живую функцию в коде, как этот.

$("p[id='les_mp']").live("click", function()
{
$("#main_logo").css("background-image","url(<?php bloginfo('stylesheet_directory'); ?>/images/header/les_header.png)");
$("a#nav_text").html("Gitaarles");

});

в

 $(document).ready(function() 
    { .... }

в header.php

Тем не менее это нене работает, когда его нажимают в main_nav.php Когда я помещаю код из main_nav в header.php, он работает.

0 голосов
/ 05 декабря 2012

Возможно, вы захотите использовать метод по ссылке ниже для рефакторинга содержимого Ajax в отдельный файл. Не уверен, поможет ли это с оригинальной проблемой, но я видел, как все работает после этого http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/#js-global в основном вы получаете ваш URL в переменную, которая печатается, и ваши скрипты имеют доступ к использованию wp_localize_script

0 голосов
/ 04 апреля 2011

Поскольку вы управляете своей страницей Ajax, события не подписываются на ваши новые элементы.Попробуйте использовать команду .live().

Кроме того, это нормально?
$("p[id='les_mp']").click(, function() ...
Не знаете точно об этой запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...