我一直在用头发拉我的头发。我们在SharePoint 2013主页中实现了bxslider。这项工作是由我现在已经离职的同事完成的,所以不是我的工作,而是......它已经完成并正在运作。
现在虽然在调用onSliderLoad回调函数时遇到运行时错误,该函数调用了slider.goToNextSlide();
从调试输出窗口VS中提取: 0x800a138f - JavaScript运行时错误:无法获取未定义或空引用的属性“goToNextSlide”
我几乎排除了代码更改,因为我已经将源代码还原了几个月,并且还将一个非常旧的快照还原到了虚拟SharePoint服务器中。这些都仍然遇到同样的新问题。我也在我们的暂存服务器上尝试了这个技巧,该服务器暂时没有任何新发布的代码。该主机现在遇到同样的问题。我唯一能想到的是外部变化引起了这个问题,但我不知道。
我从Firebug和IE10中得到了不同的错误(你必须在IE中测试和调试它; - )
从FeedsRotator.ascx(Homepart.onpx上的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。
答案 0 :(得分:0)
所以,我完全用客户端代码咆哮错误的树。事实上,填充新闻滑块的Annoucements List项目已于5天前过期。
因此,webpart上的服务器端代码查询未返回任何数据的列表:
string Qry = " <Where><Geq><FieldRef Name='Expires' /><Value IncludeTimeValue='FALSE' Type='DateTime'>{0}</Value></Geq></Where>";
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"] = "<img src=\"/sites/OMGIntranet/SiteAssets/NO-CURRENT-NEWS-STORIES.jpg\"></img>";
noNewsListItem["Expires"] = DateTime.MaxValue;
noNewsListItem.Update();
}
rep1.DataSource = list.GetItems(query).GetDataTable();
rep1.DataBind();
web.AllowUnsafeUpdates = oldAllowUnsafeUpdates;
}
}
}
);
}