Flowchart.js无法从getElementById

时间:2019-05-25 10:03:41

标签: javascript jquery html

我是JavaScript的新手。我尝试使用Flowchart.js绘制图表。从此处的示例代码开始。

<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>flowchart.js · Playground</title>
        <style type="text/css">
          .end-element { background-color : #FFCCFF; }
        </style>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.2.0/raphael-min.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <script src="http://flowchart.js.org/flowchart-latest.js"></script>
        <!-- <script src="../release/flowchart.min.js"></script> -->
        <script>
            window.onload = function () {
                var btn = document.getElementById("run"),
                    cd = document.getElementById("code"),
                    chart;
                (btn.onclick = function () {
                    var code = cd.value;

                    if (chart) {
                      chart.clean();
                    }
                    chart = flowchart.parse(code);
                    chart.drawSVG('canvas', {
                      // 'x': 30,
                      // 'y': 50,
                      'line-width': 3,
                      'maxWidth': 3,//ensures the flowcharts fits within a certian width
                      'line-length': 50,
                      'text-margin': 10,
                      'font-size': 14,
                      'font': 'normal',
                      'font-family': 'Helvetica',
                      'font-weight': 'normal',
                      'font-color': 'black',
                      'line-color': 'black',
                      'element-color': 'black',
                      'fill': 'white',
                      'yes-text': 'yes',
                      'no-text': 'no',
                      'arrow-end': 'block',
                      'scale': 1,
                      'symbols': {
                        'start': {
                          'font-color': 'red',
                          'element-color': 'green',
                          'fill': 'yellow'
                        },
                        'end':{
                          'class': 'end-element'
                        }
                      },
                      'flowstate' : {
                        'past' : { 'fill' : '#CCCCCC', 'font-size' : 12},
                        'current' : {'fill' : 'white', 'font-color' : 'red', 'font-weight' : 'bold'},
                        'future' : { 'fill' : '#FFFF99'},
                        'request' : { 'fill' : 'blue'},
                        'invalid': {'fill' : '#444444'},
                        'approved' : { 'fill' : '#58C4A3', 'font-size' : 12, 'yes-text' : 'APPROVED', 'no-text' : 'n/a' },
                        'rejected' : { 'fill' : '#C45879', 'font-size' : 12, 'yes-text' : 'n/a', 'no-text' : 'REJECTED' }
                      }
                    });
                    $('[id^=sub1]').click(function(){
                      alert('info here');
                    });
                })();
            };
        </script>
    </head>
    <body>
        <div><textarea id="code" style="width: 100%;" rows="11">

          st=>start: Start|past:>http://www.google.com[blank]
          e=>end: End:>http://www.google.com
          op1=>operation: CAT1|past
          op2=>operation: CAT2|current
          op3=>operation: CAT3|future
          op4=>operation: CAT4|future

          op1->op2->op3->op4

        </textarea></div>
        <div><button id="run" type="button">Run</button></div>
        <div id="canvas"></div>
    </body>
</html>

我想通过使用for循环和getElementById而不是<textarea>来绘制图,然后按照以下步骤创建脚本:

<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>flowchart.js · Playground</title>
        <style type="text/css">
          .end-element { background-color : #FFCCFF; }
        </style>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.2.0/raphael-min.js"></script>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
        <script src="http://flowchart.js.org/flowchart-latest.js"></script>
        <!-- <script src="../release/flowchart.min.js"></script> -->
        <script>
          function loop(){
            var Cata = [];
            var phase = "";
            var command = "";
            var code1 = "";
            var pid = document.getElementById("pid1").value;
            var i,j;

            for (i = 1; i <= pid; i++) {
              Cata[i] = "CAT"+ i + "=>" + "operation: " + "CAT"+i ;
            }


            for (j = 1; j <= Cata.length-1; j++){
              phase += Cata[j] + "\n";
              command += Cata[j].slice(0, 4)+"->";
              code1 = phase + "\n" + command.slice(0, command.length-2);
            }

            document.getElementById("code").innerText = code1;
          }
            
            window.onload = function () {
                var btn = document.getElementById("run"),
                    cd = document.getElementById("code"),
                    chart;
                (btn.onclick = function () {
                    var code = cd.value;

                    if (chart) {
                      chart.clean();
                    }
                    chart = flowchart.parse(code);
                    chart.drawSVG('canvas', {
                      // 'x': 30,
                      // 'y': 50,
                      'line-width': 3,
                      'maxWidth': 3,//ensures the flowcharts fits within a certian width
                      'line-length': 50,
                      'text-margin': 10,
                      'font-size': 14,
                      'font': 'normal',
                      'font-family': 'Helvetica',
                      'font-weight': 'normal',
                      'font-color': 'black',
                      'line-color': 'black',
                      'element-color': 'black',
                      'fill': 'white',
                      'yes-text': 'yes',
                      'no-text': 'no',
                      'arrow-end': 'block',
                      'scale': 1,
                      'symbols': {
                        'start': {
                          'font-color': 'red',
                          'element-color': 'green',
                          'fill': 'yellow'
                        },
                        'end':{
                          'class': 'end-element'
                        }
                      },
                      'flowstate' : {
                        'past' : { 'fill' : '#CCCCCC', 'font-size' : 12},
                        'current' : {'fill' : 'white', 'font-color' : 'red', 'font-weight' : 'bold'},
                        'future' : { 'fill' : '#FFFF99'},
                        'request' : { 'fill' : 'blue'},
                        'invalid': {'fill' : '#444444'},
                        'approved' : { 'fill' : '#58C4A3', 'font-size' : 12, 'yes-text' : 'APPROVED', 'no-text' : 'n/a' },
                        'rejected' : { 'fill' : '#C45879', 'font-size' : 12, 'yes-text' : 'n/a', 'no-text' : 'REJECTED' }
                      }
                    });
                    $('[id^=sub1]').click(function(){
                      alert('info here');
                    });
                })();
            };


        </script>
    </head>
    <body>
    <h2>Gen code</h2>
<div><textarea id="pid1" style="width: 50%;" rows="1">

</textarea></div>
    <button type="button" onclick="loop()">gen.</button>
    <p id="code"> code here </p>
    <div><button id="run" type="button">Run</button></div>
    <div id="canvas"></div>
    </body>
</html>

在for循环中,一切正常。它可以像Flowchart.js所要求的那样运行,但是var cd = document.getElementById("code")无法以我想要的方式呈现该图。

如何修复我的代码? 或者,textarea中的内容是什么类型?所以我可以转换为它的类型。

请尝试运行我的脚本,您将进一步了解我的意思

1 个答案:

答案 0 :(得分:1)

我认为您无法使用{ "data":[ { "result":"success", "username":"user1", "message":"user1 message", "time":"11:11:32 AM" }, { "result":"success", "username":"user2", "message":"user2 message", "time":"11:09:44 AM" } ] } ,因为它不在同一个document.getElementById()中。您可以尝试将document标签放在放置ID的同一文档中。