我已尝试过以下代码的许多变体,即交换时间。我有一个动态创建并添加的数组。它创建了一个空的联赛表。当我遍历数组并打印出表时,第一个循环总是返回undefined?我有控制台记录了所有内容,但无法解决原因。我认为这与内部循环变量有关,但我的想法已经不多了。有人可以解释为什么这会在所有循环中发生吗?我已经在这里阅读了一些问题,并且有些人谈到在第一个循环中被视为字符串的变量但是不明白。
league = [];
$('#butt').on('click',function(){
var name = $('.input1').val();
x = $('#demo');
x.html(name);
person(name,0,0,0,0,0);
});
function person(first,w,d,l,gf,ag) {
this.Name = first;
this.wins = w;
this.draws = d;
this.lose = l;
this.goalsfor = gf;
this.goalsag =ag;
newTeam = new Array
(this.Name,this.wins,this.draws,this.lose,this.goalsfor,this.goalsag);
league.push(newTeam);
teamRow = league[0][0];
makeLeague();
}
function makeLeague(){
var tableStart = "<table>"
var tableEnd = "</table>"
var tableMid ;
var secondtab = $('#demo1');
leagueSize = league.length;
console.log("league length is " + league.length);
for(k=0; k<league.length; k++){
tableMid += "<tr>";
for(i=0; i< 6; i++){
tableMid += "<td> " + league[k][i] + "</td>";
}
tableMid += "</tr>";
}
secondtab.html(tableStart + tableMid + tableEnd);
}
答案 0 :(得分:1)
当它应该用作构造函数时,你正在使用person
作为普通函数。请尝试使用new person(name, 0, 0, 0, 0, 0);
代替(并将其存储到变量中)。
此外,作为John Sheridan mentions,您还需要先初始化tableMid
变量,然后才能添加到var tableMid = "";
变量,如下所示:var
。
这是代码的清理版本。请注意您应该包含的var league = [];
$('#butt').on('click', function() {
var name = $('.input1').val();
var x = $('#demo');
x.html(name);
var person = new Person(name, 0, 0, 0, 0, 0);
});
function Person(first, w, d, l, gf, ag) {
this.Name = first;
this.wins = w;
this.draws = d;
this.lose = l;
this.goalsfor = gf;
this.goalsag = ag;
var newTeam = [this.Name, this.wins, this.draws, this.lose, this.goalsfor, this.goalsag];
league.push(newTeam);
var teamRow = league[0][0];
makeLeague();
}
function makeLeague() {
var tableStart = "<table>";
var tableEnd = "</table>";
var tableMid = "";
var secondtab = $('#demo1');
for (var k = 0; k < league.length; k++) {
var team = league[k];
tableMid += "<tr>";
for (var i = 0; i < team.length; i++) {
tableMid += "<td> " + team[i] + "</td>";
}
tableMid += "</tr>";
}
secondtab.html(tableStart + tableMid + tableEnd);
}
声明,以避免确定范围问题。
from flask import Flask, render_template_string
from wtforms import Form
from wtforms.fields.html5 import DecimalRangeField
app = Flask(__name__)
app.config['DEBUG'] = True
TPL = '''
<!DOCTYPE html>
<html>
<head>
<script>
function outputUpdate(age) {
document.querySelector('#selected-age').value = age;
}
</script>
</head>
<body>
<form>
<p>
{{ form.age.label }}:
{{ form.age(min=0, max=100, oninput="outputUpdate(value)") }}
<output for="age" id="selected-age">{{ form.age.data }}</output>
</p>
</form>
</body>
</html>
'''
class TestForm(Form):
age = DecimalRangeField('Age', default=0)
@app.route("/")
def home():
form = TestForm(csrf_enabled=False)
return render_template_string(TPL, form=form)
if __name__ == "__main__":
app.run()
答案 1 :(得分:1)
在你的makeLeague()函数中,你应该在+ =操作中使用它之前初始化tableMid。
var tableMid =&#39;&#39;;
没有这个tableMid是未定义的。
答案 2 :(得分:0)
你的错误来自for {循环的league.length
为0。
这就是为什么循环永远不会被执行,所以tableMid是未定义的。
你在开始时用
初始化联盟league = [];
使它成为非全局变量。 用
初始化它var league[];
一开始,这应该有效。 此外,您需要使用空字符串初始化tableMid,如John Sheridan所述,或者添加将失败为未定义。
var tableMid = "";
[编辑] sry错误的链接