我有一个在网站上运行的 Twitter Bootstrap 轮播。轮播代码是使用 Smarty 模板生成的。我有很多其他的轮播使用相同的代码运行,但是关于这个的一些事情让我很伤心。图像旋转得很好,但是当我单击推进轮播的控件之一时出现错误。这是我在 Firebug 中遇到的错误:
TypeError: $active.attr(...) is undefined
, curId = $active.attr('id').substring(7) (bootstrap.js, line 343)
(Chrome 会抛出关于未定义元素的子字符串未定义的警告)
如果你手头没有副本,这里是 bootstrap.js 的相关部分:
, slide: function (type, next) {
var $active = this.$element.find('.item.active')
, $next = next || $active[type]()
, isCycling = this.interval
, direction = type == 'next' ? 'left' : 'right'
, fallback = type == 'next' ? 'first' : 'last'
, that = this
, e = $.Event('slide', {
relatedTarget: $next[0]
})
, curId = $active.attr('id').substring(7)
此错误的最可能原因似乎是当前没有任何 .item 元素(轮播图像)是 .active。或者活动轮播元素没有 ID。但是我可以通过查看 Firebug 中的代码来判断这些事情都没有发生。
如果有帮助,这里是生成轮播控件的 Smarty 代码,显示每个元素都有一个 ID,并且第一个元素被分配了一个 .active 类:
<div class="text-control">
{foreach from=$articles item=article name=artforeach}
<a {if $article.source|strlen > 7}href="{$article.source}"{else}href="javascript:void(0)"{/if}
{if $smarty.foreach.artforeach.first} class="active"{/if} id="name{$article.id}"
data-target="{$smarty.foreach.artforeach.index}">
<h3>{$article.name}</h3>
<p>{$article.teaser[0].content|strip_tags|truncate:100:"..."}</p>
</a>
{/foreach}
</div>
有人知道这里可能发生了什么吗?