Javascript生成的表不工作
有人能发现一个明显的错误吗?为什么这个Javascript生成的表(Javascript生成的表不工作,javascript,html,arrays,for-loop,html-table,Javascript,Html,Arrays,For Loop,Html Table,有人能发现一个明显的错误吗?为什么这个Javascript生成的表(showResultsfunction)没有显示在我的html中?当我有很多文字值要引用时,总是会发生这种情况……我也很感谢对我的格式(空白)的任何其他评论 <script type="text/javascript"> //calculates sum of all values within an array function totalVotes(votes){ / va
showResults
function)没有显示在我的html中?当我有很多文字值要引用时,总是会发生这种情况……我也很感谢对我的格式(空白)的任何其他评论
<script type="text/javascript">
//calculates sum of all values within an array
function totalVotes(votes){ /
var total=0;
for (i=0;i<votes.length;i++){
total = votes[i] + total;
}
return total;
}
//calculates a percentage, rounded to nearest integer
function calcPercent(item, sum){
return Math.round((item/sum)*100);
}
//tests value of partyType parameter
function createBar(partyType, percent){
switch (partyType){
case D: barText="<td class='dem'></td>";
break;
case R: barText="<td class='rep'></td>";
break;
case I: barText="<td class='ind'></td>";
break;
case G: barText="<td class='green'></td>";
break;
case L: barText="<td class='lib'></td>";
break;
}
for(i=1;i<=percent;i++){
document.write(barText);
}
}
function showResults(race,name,party,votes){
var totalV=function totalVotes(votes);
document.write("<h2>" +race+ "</h2>");
document.write("<table cellspacing='0'>");
document.write("<tr>");
document.write("<th>Candidate</th>");
document.write("<th class='num'> Votes</th>");
document.write("<th class='num'>%</th>");
document.write("</tr>");
for (r=0;r<name.length;r++){
document.write("<tr>");
document.write("<td>"+name[i]+ '(' +party[r]+ ")" +"</td>");
document.write("<td class='num'>" +votes[r]+ "</td>");
var percent=function calPercent(votes[r],totalV)
document.write("<td class='num'>(" +percent[r]+ "%)</td>");
createBar(party[r], percent);
document.write("</tr>");
}
document.write("</table>");
}
//计算数组中所有值的总和
功能总票数(票数){/
var合计=0;
对于(i=0;i我认为在与字符串比较时需要加引号,因此D与“D”不同。
应该是
var totalV = totalVotes(votes);
我认为在与字符串比较时需要加引号,因此D与“D”不同。
应该是
var totalV = totalVotes(votes);
1) 在案例陈述中使用引号:案例“D”
,案例“R”
2) 使用innerHTML
方法而不是document.write。只需将其与串联字符串一起使用一次,而不要在for
循环中使用
3) var totalV=function totalvoces(投票);
将引发一个错误:也许您需要编写var totalV=totalvoces(投票);
4) barText
未在任何地方定义(首先用var
声明)
如果您也使用通用建议,则可以通过对象查找避免整个切换
function createBar(partyType, percent){
var cells = "",
cellclass = {
"D": "dem", "R": "rem", "I": "ind", "G": "green", "L": "lib"
}[partyType];
for(var i = 1; i <= percent.length; i++){
cells += "<td class='" + cellclass + "'></td>"
}
<yourtablerow>.innerHTML = cells; // <yourtablerow> is a reference to a table row.
}
函数createBar(partyType,percent){
var单元格=”,
cellclass={
“D:“dem”,“R:“rem”,“I:“ind”,“G:“绿色”,“L:“lib”
}[partyType];
对于(var i=1;i1),在案例陈述中使用引号:case“D”
,case“R”
2) 使用innerHTML
方法而不是document.write。只需将其与串联字符串一起使用一次,而不要在for
循环中使用
3) var totalV=function totalvoces(投票);
将引发一个错误:也许您需要编写var totalV=totalvoces(投票);
4) barText
未在任何地方定义(首先用var
声明)
如果您也使用通用建议,则可以通过对象查找避免整个切换
function createBar(partyType, percent){
var cells = "",
cellclass = {
"D": "dem", "R": "rem", "I": "ind", "G": "green", "L": "lib"
}[partyType];
for(var i = 1; i <= percent.length; i++){
cells += "<td class='" + cellclass + "'></td>"
}
<yourtablerow>.innerHTML = cells; // <yourtablerow> is a reference to a table row.
}
函数createBar(partyType,percent){
var单元格=”,
cellclass={
“D:“dem”,“R:“rem”,“I:“ind”,“G:“绿色”,“L:“lib”
}[partyType];
对于(var i=1;i,您的代码存在许多问题:
在totalvoces
函数的开头大括号后随机斜杠
使用for循环声明一个没有var
的变量(这不会破坏代码,但这样做不是一个好主意)
如其他人所述,switch语句的使用不正确(非数字字符需要加引号)
正如法布里齐奥·卡尔德兰所说,barText
设置不正确。它可以工作,但这是一种非常糟糕的做法。在切换之前先声明它
createBar
中的for循环将根据您传递给它的内容而不起作用。您可以在showResults
中的for循环中将数组作为percent
的值传递,然后将其与数字进行比较,将其视为一个数字。您希望改为在for循环中使用percent.length
访问函数的方法不正确。var totalV=function totalvoces(voces);
无效且不起作用。或者使用var totalV=totalvoces(voces);
或者如果您不想使用该方法,var totalV=totalvoces.call(null,voces);
(尽管您不需要在代码中使用.call
属性)
showResults
函数中for循环中的另一个错误。var percent=function calPercent(投票[r],totalV)
既有我的6点问题,即错误地访问函数,也有由于拼写错误导致该函数实际上不存在的问题。非常确定你的意思是var percent=calcPercent(投票[r],totalV)
我不喜欢document.write
方法,而且很长时间没有使用它。我个人不惜一切代价避免使用它,因为它是如何工作的/在哪里编写的。正如法布里齐奥所建议的那样,innerHTML
是一个更好的选择
总的来说,代码是干净的,大部分都可以工作,但我觉得你甚至没有尝试在启用调试器的情况下运行代码。Firefox和Chrome都有一个不错的本机调试器,可以发现这些错误
尽管如此,我已经解决了您的代码中的这些问题。仍然有一些其他的更改可以使代码变得更好/更小/更简单,但我认为现在可以这样做
<script type="text/javascript">
//calculates sum of all values within an array
function totalVotes(votes)
{
var total=0;
for (var i=0; i < votes.length; i++){
total = votes[i] + total;
}
return total;
}
//calculates a percentage, rounded to nearest integer
function calcPercent(item, sum)
{
return Math.round((item/sum)*100);
}
//tests value of partyType parameter
function createBar(partyType, percent)
{
var barText = null;
switch (partyType)
{
case 'D': barText="<td class='dem'></td>";
break;
case 'R': barText="<td class='rep'></td>";
break;
case 'I': barText="<td class='ind'></td>";
break;
case 'G': barText="<td class='green'></td>";
break;
case 'L': barText="<td class='lib'></td>";
break;
}
var result = "";
for(var i=1;i<percent.length;i++)
{
result += barText;
}
return result;
}
function showResults(race,name,party,votes)
{
var totalV=totalVotes(votes);
var result = "";
result += "<h2>" +race+ "</h2>";
result += "<table cellspacing='0'>";
result += "<tr>";
result += "<th>Candidate</th>";
result += "<th class='num'> Votes</th>";
result += "<th class='num'>%</th>";
result += "</tr>";
var percent = 0;
for (var r=0; r < name.length; r++){
result += "<tr>";
result += "<td>"+name[i]+ '(' +party[r]+ ")" +"</td>";
result += "<td class='num'>" +votes[r]+ "</td>";
percent = calcPercent(votes[r],totalV)
result += "<td class='num'>(" +percent[r]+ "%)</td>";
result += createBar(party[r], percent);
result += "</tr>";
}
result += "</table>";
document.body.innerHTML = result; // or document.write(result) if you prefer
}
</script>
//计算数组中所有值的总和
功能总票数(票数)
{
var合计=0;
对于(变量i=0;i 对于(var i=1;i,您的代码存在许多问题:
在totalvoces
函数的开头大括号后随机斜杠
使用for循环声明一个没有var
的变量(这不会破坏代码,但这样做不是一个好主意)
正如其他人所说,switch语句的使用不正确(非数字字符需要加引号)