【问题标题】:jQuery .on() to create content carousel dynamically from listjQuery .on() 从列表动态创建内容轮播
【发布时间】:2014-10-03 15:37:39
【问题描述】:

我正在使用一个简单的 ajax 调用从共享点列表中获取某些信息并从中创建一个轮播。

我认为我需要使用 .promise() 或 .on() 以便在 for 循环遍历列表后加载它,因此我将一个对象添加到轮播中,但我不知道如何实现这一点。

这是我的循环的样子。它确实正确获取了所有数据。

 for (var i = 0; i < data.d.results.length; i++) {
                    response = '<article class="item"><img src="' + data.d.results[i].Image_x0020_URL + '"><div class="carousel-caption"><h3>' + data.d.results[i].Title + '</h3><p>' + data.d.results[i].Content + '</p><p><a class="btn btn-info btn-sm">Read More</a></p></div></article>';
                    indicator = '<li data-target="#myCarousel" data-slide-to="'+i+'" class="active"></li>';
                }

在 for 循环之后,我将我的信息附加到我的轮播中:

$('#homepageItems').append(res);
$('#indicators').append(ind);

我的轮播代码:

<div id="myCarousel" class="carousel slide">
  <div class="carousel-inner" id="homepageItems">
      <!-- Indicators -->
    <ol class="carousel-indicators" id="indicators">
    </ol>
    <div class="carousel-controls"> <a class="carousel-control left" href="#myCarousel" data-slide="prev"> <span class="fa fa-angle-double-left"></span> </a> <a class="carousel-control right" href="#myCarousel" data-slide="next"> <span class="fa fa-angle-double-right"></span> </a> </div>
  </div>
</div>

我已将 for 循环添加到变量中:

var loop = function(){forloop in here}

然后添加

$.when(loop()).done().... 

这确实会遍历所有结果并向我显示当通过 alert("finished"); 触发时我把时间放在里面,但轮播没有渲染。

for 循环完成后如何将对象加载到轮播中?

【问题讨论】:

    标签: jquery twitter-bootstrap


    【解决方案1】:

    您不需要.on 来创建轮播。

    查看这个问题的答案:Bootstrap Carousel with dynamic items does not slide

    所以在你的 for 循环之后,你只需这样做:

    $.ajax( {
       url: '/carousel',
       dataType: 'json',
       success: function(data) {
          var response = '',
              indicator = '';
          for (var i = 0; i < data.d.results.length; i++) {
              response += '<div class="item"><img src="' + data.d.results[i].Image_x0020_URL + '"><div class="carousel-caption"><h3>' + data.d.results[i].Title + '</h3><p>' + data.d.results[i].Content + '</p><p><a class="btn btn-info btn-sm">Read More</a></p></div></div>';
              indicator += '<li data-target="#myCarousel" data-slide-to="'+i+'"></li>';
          }
          $('#homepageItems').append(response);
          $('#indicators').append(indicator);
    
          // set up the first slide as "active"
          $('.item').first().addClass('active');
          $('.carousel-indicators > li').first().addClass('active');
          $("#myCarousel").carousel();
         }
    });
    

    Plunker here.

    【讨论】:

    • 我不需要在 for 循环中进行追加吗?
    • 一旦这张幻灯片从幻灯片 1 滑到 2 幻灯片就会消失?
    • 您为什么使用article 标签而不是div - 不确定这会对轮播产生什么影响?如果您使用开发人员工具/Firebug 在轮播停止滑动时检查轮播,是否所有动态添加的元素都在那里?
    • 当我手动填充时,轮播会显示文章或 div。动态地,我看到开发工具中的所有项目,它会自动在幻灯片中移动,但是当我单击一个指示器时,它们会消失,并且上一个/下一个按钮也不显示。到达那里:)
    • 得到这个工作在一个plunker。在for 循环中,您需要使用+= 作为运算符,并如上所述设置“第一张”幻灯片。以 plunker 为例。
    猜你喜欢
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多