Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript生成的表不工作_Javascript_Html_Arrays_For Loop_Html Table - Fatal编程技术网

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

有人能发现一个明显的错误吗?为什么这个Javascript生成的表(
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语句的使用不正确(非数字字符需要加引号)