Java Script简单函数调用(函数不在范围内)
问题描述:
我遇到了一个名为returnDayNumber的全局方法的问题。如果我在我的Java脚本中调用该函数,它可以正常工作。但是当我做了一个按钮来调用函数它说:“self.returnDayNumber不是一个函数”(认为var self =这可能会解决问题)。 这里是我的代码:Java Script简单函数调用(函数不在范围内)
/*
* Global data
* used to centralize user data to be used in graphs
*/
var userModel = new userHealthModel();
userModel.createUsers();
userModel.addUser();
var newChart = new NewHighCharts();
returnDayNumber = function(month, day)
{
if(month==1)
{
return day;
}
else if(month==2)
{
return(31+day);
}
else if(month==3)
{
return(60+day);
}
else if(month==4)
{
return (91+day);
}
else if(month==5)
{
return(121+day);
}
else if(month==6)
{
return(152+day);
}
else if(month==7)
{
return(182+day);
}
else if(month==8)
{
return(213+day);
}
else if(month==9)
{
return(244+day);
}
else if(month==10)
{
return(274+day);
}
else if(month==11)
{
return(305+day);
}
else if(month==12)
{
return(335+day);
}
}
saveThis = function()
{
var self = this;
alert("your about to save!")
newChart.destroyChart();
newChart= new NewHighCharts();
var numberOfUsers = userModel.users().length;
var users = userModel.users();
var weights = userModel.getWeights();
var dates = userModel.getDates();
var dataArray = [];
var xAndY = []
var singleDate;
var name;
for(var i=0;i<numberOfUsers;i++)
{
name = users[i].name;
xAndY = [];
for(var x=0;x<dates.length-1;x++)
{
//extract month
var month = ([dates[i][x]].toString()).substring(0,2);
//extract day
day = parseInt(([dates[i][x]].toString()).substring(3,5));
//add the day number and weight of users to an array of x and y coordinates
xAndY.push([self.returnDayNumber(month,day),weights[i][x]])
}
newChart.addNewSeries(name,xAndY);
}
///!!!!This works!!!///
this.saveThis()//!!!
}
ko.applyBindings(userModel);
我犯了一个KO用户模型,但我不认为它相关。这里是我的HTML,注意它的KO语法,但它的工作原理。
<button data-bind="click: saveThis">Save</button>
我很可能犯了一个简单的错误或者超出了范围。我是一个java脚本初学者,对于简单的问题感到抱歉。非常感谢任何有用的程序员!
答
移动var self = this;
外面的你的saveThis
功能不在里面,这样self
是在正确的范围内。
+0
这样做了!非常感谢Stewe! – 2012-04-06 22:36:05
此外,上述逻辑与闰年一起工作良好? – Ramesh 2012-04-06 03:40:22
这里有一个缩短returnDayNumber函数的方法: monthArray = new Array(0,0,31,60,91,121,152,182,213,244,274,305,335); returnDayNumber = function(month,day) { if(month == 1) return day; else if(month> 1 && month Rhyono 2012-04-06 04:03:06
@Rhyono您仍然可以使用刻度标记进行代码格式化,例如'this'。 – mc10 2012-04-06 04:15:23