【问题标题】:Reinitialize jQuery plugin after AJAX page updateAJAX 页面更新后重新初始化 jQuery 插件
【发布时间】:2013-10-04 15:04:40
【问题描述】:

我在主页上有一个图像轮播。为了呈现它,我使用 Jquerytools(可滚动+导航器)

我是这样触发jQuery初始化脚本的:

$(window).load(function(){
   $("#today-news-carousel").scrollable({ vertical: true, mousewheel: true }).navigator({ navi: '#today-news-navigator' });

 });

这个轮播的内容可以通过 AJAX 调用来更新。 在这个电话之后,我需要重新初始化这个轮播。 这里是进行 AJAX 调用的函数:

  $(document).on('click', '.nav-highlight', function() {

      var requestDateArray = $(this).attr('data-thedate').split('-');
      var d = new Date();
      var requestedDate = new Date(requestDateArray[0], (requestDateArray[1]-1), requestDateArray[2]);
      var today = new Date(d.getFullYear(), d.getMonth(), d.getDate());
      if (requestedDate > today) {
          return
      }else {
        $.ajax({
          type: "POST",
          url: templateDir+'/highlight-news-navigator.php',
          context: this,
          dataType: "html",
          data: { date: $(this).attr('data-thedate') },
          beforeSend: function(){ 
          },
          success: function(data) {
            $('.today-news').fadeOut('fast', function(){
              $(this).empty().html(data).fadeIn('fast');
            });
          },
          complete: function(){
            $("#today-news-carousel").scrollable({ vertical: true, mousewheel: true })
            .navigator({ navi: '#today-news-navigator' });   
          }
        });

      }

  });

在“完成”回调函数中,我尝试重新初始化插件,但在控制台中出现以下错误:

TypeError: $(...).scrollable(...).navigator is not a function
.navigator({ navi: '#today-news-navigator' });

我不明白为什么当我加载页面时它可以正常工作,当我重新初始化它似乎找不到 .navigator 方法...

【问题讨论】:

  • 是否有理由将重新初始化代码放入complete,而不是success?它更适合fadeIn() 回调。没有承诺,但值得一试。
  • 你太棒了!!!我整个下午都在这个问题上!把它放在 fadeIn 回调中工作正常!再次感谢您!
  • ...或者代替$.ajax({}).done ?
  • 你能把它作为答案发布,这样它就不会显示为未回答吗?

标签: javascript jquery plugins jquery-tools


【解决方案1】:

感谢弓箭手的帮助,我找到了解决方案。 重新初始化插件的脚本必须位于 fadeIn() 回调中。 这里的工作代码:

  $(document).on('click', '.nav-highlight', function() {

      var requestDateArray = $(this).attr('data-thedate').split('-');
      var d = new Date();
      var requestedDate = new Date(requestDateArray[0], (requestDateArray[1]-1), requestDateArray[2]);
      var today = new Date(d.getFullYear(), d.getMonth(), d.getDate());
      if (requestedDate > today) {
          return
      }else {
        $.ajax({
          type: "POST",
          url: templateDir+'/highlight-news-navigator.php',
          context: this,
          dataType: "html",
          data: { date: $(this).attr('data-thedate') },
          beforeSend: function(){ 
          },
          success: function(data) {
            $('.today-news').fadeOut('fast', function(){
              $(this).empty().html(data).fadeIn('fast', function(){
                $("#today-news-carousel").scrollable({ vertical: true, mousewheel: true }).navigator({ navi: '#today-news-navigator' });   
              });
            });
          },
        });

      }

  });

【讨论】:

  • 这个 SO 讨论让我朝着正确的方向前进——使用 JQuery 分离/重新附加元素时,您必须在任何动画完成时重新初始化任何插件。
猜你喜欢
  • 1970-01-01
  • 2012-04-19
  • 2012-04-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多