0

我正在尝试使用 ajax 在 div 中加载 wordpress 帖子,但其中的 jQuery 在加载内容后将无法工作。例如,我在加载页面中有手风琴和滑块,它们也不起作用。而且加载的 div 的关闭按钮也不起作用。

我也检查了这篇文章Jquery event handler not working on dynamic content

但没有成功。

投资组合.php

<div id="fff">

</div>


<h2 class="ow-heading"><?php the_title(); ?></h2>
    <?php the_content(); ?>
<ul class="projectlist clearfix" id="<?php global $post; $post_slug=$post->post_name; echo $post_slug; ?>">
<?php
global $wp_query;
query_posts( array('post_type' => array( 'portfolio' ),'showposts' => 12, 'paged'=>$paged )
);
if (have_posts()) : while (have_posts()) : the_post();
?>
<li class="project">
    <a href="<?php the_permalink(); ?>" data-post="" rel="<?php the_ID(); ?>" class="ajax" data-toggle="modal" data-target="#myModal">
        <?php if ( has_post_thumbnail() ) { ?>
        <?php the_post_thumbnail(); ?>
        <?php } ?> 
        <div class="projectinfo">
            <div class="meta">
                <h4><?php the_title(); ?></h4>
                <h6><em><?php echo get_post_meta($post->ID, "spq_portfolio_tag", true) ?></em></h6>
            </div>
        </div>
    </a>
</li>
<?php endwhile; ?>
<?php else: ?>
<p><?php _e("Sorry, no posts matched your criteria.","arclite"); ?></p>
<?php endif; wp_reset_query(); ?>
</ul>

单portfolio.php

<?php get_header(); ?>
  <?php if(have_posts()) : while(have_posts()) : the_post(); ?>
  <div class="sparq-main">
    <div class="insparq-main">

      <h1 class="portfolio-single-title"><?php the_title(); ?></h1>
      <?php the_content(); ?>
    </div>
  </div>
<?php endwhile; endif; ?>
<?php get_footer(); ?>

自定义.js

jQuery.noConflict();
jQuery(document).ready(function(){



/*----------------------------------------------------*/
/* Sticky Navigation
/*----------------------------------------------------*/ 

jQuery(".bottommenu").sticky({ topSpacing: 0 });

/*----------------------------------------------------*/
/* Slab Text
/*----------------------------------------------------*/  

function slabTextHeadlines() {
jQuery("h1.tagline").slabText({
      "viewportBreakpoint":380
    });
};
jQuery(window).load(function() {
    setTimeout(slabTextHeadlines, 1000);
});

/*----------------------------------------------------*/
/* Parallax
/*----------------------------------------------------*/

jQuery('.sep, .header').each(function(){
   jQuery(this).parallax("100%", 0.3); 
});

/*----------------------------------------------------*/
/* Accordion
/*----------------------------------------------------*/

jQuery('.accordion').each(function(){
      var acc = jQuery(this).attr("rel") * 2;
      jQuery(this).find('.accordion-inner:nth-child(' + acc + ')').show();
       jQuery(this).find('.accordion-inner:nth-child(' + acc + ')').prev().addClass("active");
});

jQuery('.accordion .accordion-title').click(function() {
      if(jQuery(this).next().is(':hidden')) {
          jQuery(this).parent().find('.accordion-title').removeClass('active').next().slideUp(200);
          jQuery(this).toggleClass('active').next().slideDown(200);
      }
      return false;
});

/*----------------------------------------------------*/
/* Custom Scroll
/*----------------------------------------------------*/

jQuery("html").niceScroll({cursorborder:"0px solid #fff",cursorwidth:"10px",scrollspeed:"70"});

/*----------------------------------------------------*/
/* Flex Slider
/*----------------------------------------------------*/

jQuery('.testi').flexslider({
    selector: ".slides > li",
    directionNav: false 
});

/*----------------------------------------------------*/
/* Navigation Scroll to Section
/*----------------------------------------------------*/

  var device = navigator.userAgent.toLowerCase();
  var ios = device.match(/(iphone|ipod|ipad)/);
 //function that returns element's y position

    jQuery("a[href*=#]").on('click', function(e) {
      var scrollTarget = jQuery(this.hash).offset().top;
      if(scrollTarget) 
          e.preventDefault();
        if(parseInt(scrollTarget) !== parseInt(jQuery(window).scrollTop())) {
          var nav2 = jQuery("nav");
        if (ios) nav2.hide();
          jQuery('html,body').animate({scrollTop:scrollTarget}, 1000, "swing", function(evt) {
          if (ios) {
            if(scrollTarget == 0) 
                nav2.css({position:'absolute', top:jQuery("#intro").height()});
            else
                nav2.css({position:'absolute', top:scrollTarget});
            var nav2clone = jQuery("nav")
            nav2clone.show();
          }
      });
    }
    });

    if (ios) {
        jQuery(document).bind('touchmove',function(){
          var intro = jQuery("#intro"), nav2 = jQuery("nav");
          console.log(nav2.position().top);
        if(intro.height() != nav2.position().top)
        {
            nav2.css({position:'fixed', top:'0px'});
            console.log(nav2.position().top);
        }
        else
        {
            nav2.css({position:'relative', top: ''});
        }
      });   
    }

/*----------------------------------------------------*/
/* Fit Video Responsive
/*----------------------------------------------------*/

jQuery(".spq-video").fitVids();
});

阿贾克斯调用

jQuery("a.ajax").on('click', function(e) {
    e.preventDefault();
    var url = jQuery(this).attr("href");
    jQuery.get(url, function(data) {
      jQuery("#fff").show(600).html(data);
      var scrollTarget = jQuery("#fff").offset().top;
          jQuery('html,body').animate({scrollTop:scrollTarget-80}, 1000, "swing");
    });
  });

使用 ajax 加载页面内容后,与 custom.js 相关的所有元素都无法正常工作,如滑块、手风琴等。加载内容上的内容停止工作。

4

2 回答 2

2

您的代码就像您将其包装在“就绪”的 jQuery 中一样工作。

我在这里模拟了您页面的 JSFiddle:

http://jsfiddle.net/NEest/

jQuery(function () {
    jQuery(document.body).on('click', 'a.ajax', function () {
        var post_url = jQuery(this).attr("href");
        var post_id = jQuery(this).attr("rel");
        alert(post_url + " - " + post_id);
        jQuery("#fff").html('<div class="loading">loading...</div>');
        jQuery("#fff").load(post_url).fadeIn(500);
        return false;
    });

    jQuery("a.pclose").click(function () {
        jQuery("#fff").fadeOut();
    });
});

请注意:JSFiddles 不需要“就绪”代码,因为它是一个内置功能(左侧的下拉选项),但出于演示目的添加它并没有什么坏处。

如果您可以用任何剩余的问题更新 JSFiddle,这将使每个人都更容易提供帮助。

于 2013-10-02T08:34:29.270 回答
-2

所有 jquery 插件在页面加载时都会读取文档的 dom,因此为了在 ajax 加载的内容上启用 jquery 功能,您必须重新初始化 jquery 插件。那么您的代码将起作用。
请检查我在这篇文章中的回答

于 2013-10-02T06:59:41.240 回答