bxSlider停止工作2天前没有代码更改
我一直在用我的头发拉出来。 我们在SharePoint 2013主页中实现了bxslider。 这项工作是由我现在已离职的同事完成的,所以不是我的工作,而是….它已经完成并正在工作。
现在虽然在调用onSliderLoad回调函数时遇到运行时错误,该函数调用了slider.goToNextSlide();
从Debug Output窗口中提取VS:0x800a138f – JavaScript运行时错误:无法获取未定义或空引用的属性’goToNextSlide’
我几乎排除了代码更改,因为我已经将源代码还原了几个月,并且还将一个非常旧的快照还原到了虚拟SharePoint服务器中。 这些都仍然遇到同样的新问题。 我也在我们的暂存服务器上尝试了这个技巧,该服务器暂时没有任何新发布的代码。 该主机现在遇到同样的问题。 我唯一能想到的是外部变化导致了这个问题,但我不知道。
我从Firebug和IE10中获得了不同的错误(你必须在IE中测试和调试它;-))
从FeedsRotator.ascx中提取(Homepart.aspx上的Webpart)
var slider= $('#slider2').bxSlider({ auto: true, controls: false, pager:false, pause: 10000, slideWidth: (sir ? sirina:300), slideHeight: 450, randomStart: true, autoHover: true, onSliderLoad: function (currentIndex) { slider.goToNextSlide(); //This is line 1024 },
从BxSlider.css中提取
#slider1 { margin:0; padding:0; } .bx-wrapper { position: relative; margin: 10px; padding: 0; *zoom: 1; } .bx-wrapper img { max-width: 100%; display: block; }
忘了说我们正在使用jquery 1.9.1。
所以,我用客户端代码完全咆哮了错误的树。 实际上,填充新闻滑块的Annoucements List项目已于5天前过期。
因此,webpart上的服务器端代码查询未返回任何数据的列表:
string Qry = " {0} "; protected void Page_Load(object sender, EventArgs e) { if (!((Page)System.Web.HttpContext.Current.CurrentHandler).IsPostBack) { DisplayAnnouncements(); } } private void DisplayAnnouncements() { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID)) { SPList list = web.Lists["Announcements"]; SPQuery query = new SPQuery(); query.RowLimit = 10; query.Query = string.Format(Qry, DateTime.Now.ToString("yyyy-MM-dd")); rep1.DataSource = list.GetItems(query).GetDataTable(); rep1.DataBind(); } } } ); }
所以现在我必须决定如何处理这个问题
选项1(查找最近过期的公告):
private void DisplayAnnouncements() { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID)) { SPList list = web.Lists["Announcements"]; SPQuery query = new SPQuery(); query.RowLimit = 10; DateTime queryDate = DateTime.Now; query.Query = string.Format(Qry, queryDate.ToString("yyyy-MM-dd")); while (list.GetItems(query).Count == 0 && queryDate > new DateTime(2000, 1, 1)) //Stop an infinitive loop where list is empty { TimeSpan oneDay = new TimeSpan(1, 0, 0, 0); queryDate = queryDate - oneDay; query = new SPQuery() { Query = string.Format(Qry, queryDate.ToString("yyyy-MM-dd")) }; } rep1.DataSource = list.GetItems(query).GetDataTable(); rep1.DataBind(); } } } ); }
选项2(显示没有新闻)
private void DisplayAnnouncements() { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(SPContext.Current.Site.ID)) { using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID)) { bool oldAllowUnsafeUpdates = web.AllowUnsafeUpdates; web.AllowUnsafeUpdates = true; web.Update(); SPList list = web.Lists["Announcements"]; SPQuery query = new SPQuery(); query.RowLimit = 10; DateTime queryDate = DateTime.Now; query.Query = string.Format(Qry, queryDate.ToString("yyyy-MM-dd")); if (list.GetItems(query).Count == 0) { SPListItem noNewsListItem = list.AddItem(); noNewsListItem["Title"] = "NoCurrentNews"; noNewsListItem["MainDisplayImage"] = ""; noNewsListItem["Expires"] = DateTime.MaxValue; noNewsListItem.Update(); } rep1.DataSource = list.GetItems(query).GetDataTable(); rep1.DataBind(); web.AllowUnsafeUpdates = oldAllowUnsafeUpdates; } } } ); }