我有一个包含链接的javascript对象的页面:
//the constructor function
function NewsScroller() {
}
//now put some config objects using the JSON structure
NewsScroller.prototype.config = {
serviceUrl : '/NewsProvider.svc/rest/GetNews/',
pageIndex : 0
}
//the argumented constuctor for this object
NewsScroller.prototype.init = function () {
this.getNews(this.config.pageIndex);
console.log(this.config.pageIndex);
}
NewsScroller.prototype.decreasePage = function () {
console.log('current page index ' + this.config.pageIndex);
}
然后我有页面准备声明:
<script>
$(document).ready(function () {
var newsScrollerForPage = new NewsScroller();
newsScrollerForPage.init();
newsScrollerForPage.decreasePage();
});
</script>
产生结果:
当前页面索引0
我想从锚标记中调用该函数,所以我有:
<div class="scroller-left">
<a id="scroller-left-a" href="javascript:newsScrollerForPage.decreasePage();">
<img src="/Images/Left-Scroller.jpg"/>
</a>
</div>
但是当我点击锚时,我得到了:
newsScrollerForPage未定义
这是为什么?当然,我应该能够像在.ready方法中那样调用对象和函数吗?
答案 0 :(得分:1)
使用本地范围(通过使用“var”)在ready函数内定义newsScrollerForPage,除非在同一范围内定义使用它的函数,否则不能在那里使用它(范围从哪里评估)定义函数,而不是从它们被调用的地方定义。
你可以通过从它之前删除var来快速解决问题(使其更具全局性而非局部性)但我不建议将其作为最佳解决方案。
最好将这样的锚链接起来:
$(document).ready(function () {
var newsScrollerForPage = new NewsScroller();
newsScrollerForPage.init();
newsScrollerForPage.decreasePage();
document.getElementById("scroller-left-a").onclick=function()
{
newsScrollerForPage.decreasePage();
return false;
}
});
并从HTML元素中删除href。