Ich habe ein Problem mit einer globalen Methode namens ReturnDayNumber. Wenn ich die Funktion innerhalb meines Java-Skripts aufruft, funktioniert es einwandfrei. aber wenn ich einen Knopf machte, um die Funktion aufzurufen, sagte es: "self.returnDayNumber ist keine Funktion" (dachte var self = dies könnte das Problem lösen). hier ist mein Code:Java Script einfacher Funktionsaufruf (Funktion nicht im Bereich)
/*
* 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);
Ich habe ein Benutzermodell KO, aber i dont seine relevanten denken. und hier ist mein HTML, beachte seine KO-Syntax, aber es funktioniert.
<button data-bind="click: saveThis">Save</button>
Ich mache wahrscheinlich einen einfachen Fehler oder etwas ist außerhalb des Umfangs. Ich bin ein Java Script Anfänger so leid für die einfache Frage. Vielen Dank an hilfreiche Programmierer!
Auch die obige Logik funktioniert gut mit Leap Jahren? – Ramesh
Hier ist eine Möglichkeit, Ihre returnDayNumber Funktion zu verkürzen: monthArray = new Array (0,0,31,60,91,121,152,182,213,244,274,305,335); returnDayNumber = Funktion (Monat, Tag) { if (month == 1) Rückgabetag; sonst if (Monat> 1 && Monat <= 12) Rückgabetag + MonatArray [Monat]; sonst Rückgabe 0; } Sie müssen den Mangel an Formatierung entschuldigen; Kommentare erlauben keine Code-Formate. – Rhyono
@Rhyono Sie können immer noch die Teilstriche für die Codeformatierung verwenden, wie 'this'. – mc10