【问题标题】:Calling a function without clicking anything调用函数而不单击任何内容
【发布时间】:2013-02-16 01:39:15
【问题描述】:

我是编程新手,我试图在没有任何按钮或单击事件的情况下调用函数。我正在使用 javascript 函数在表中创建一个表。到目前为止,这是我的代码:

<html>
<head> <title> Hello </title> </head>
<body>
<table border=1>
    <tr>
        <td> Hello! <input type='hidden' value='0' id='theValue' /> <script> add(); </script> <div id='myDiv'> </div> </td>
    </tr>

<script>
$ctra = 1;
$ctr1a = 1;  
function add() { 
    var ni = document.getElementById('myDiv');
    var numi = document.getElementById('theValue');
    var num = (document.getElementById('theValue').value -1)+ 2;
    numi.value = num;
    var newdiv = document.createElement('div');
    var divIdName = 'my'+num+'Div';
    newdiv.setAttribute('id',divIdName);
    newdiv.innerHTML = "<table border=1>"+
                        "<tr>"+
                        "<td> Hello! <input type='hidden' value='0' id='theValue' /> <script> add(); </script> <div id=('" + divIdName + "')> </div> </td>"+
                        "</tr>"+
                        "</table>";
    if($ctra<100){
        ni.appendChild(newdiv);
        $ctra++;
    }
}
</script>

</table>
</body>
</html>


当我运行它时,它会显示

"+ ""+ "
Hello!
"; if($ctra<100){ ni.appendChild(newdiv); $ctra++; } }


在浏览器中。问题可能是什么?提前感谢您!

编辑

function add() { 
    var ni = document.getElementById('myDiv');
    var numi = document.getElementById('theValue');
    var num = (document.getElementById('theValue').value -1)+ 2;
    numi.value = num;
    var newdiv = document.createElement('div');
    var divIdName = 'my'+num+'Div';
    newdiv.setAttribute('id',divIdName);
    newdiv.innerHTML = "<table border=1><tr><td> Hello! <input type='hidden' value=0 id='theValue' /><div id='" + divIdName + "'></td></tr></table>";
    ni.appendChild(newdiv);
    for(var i=1;i<100;i++) {
        var ni = document.getElementById(divIdName);
        var numi = document.getElementById('theValue');
        var num = (document.getElementById('theValue').value -1)+ 2;
        numi.value = num;
        var newdiv = document.createElement('div');
        var divIdName = 'my'+num+'Div';
        newdiv.setAttribute('id',divIdName);
        newdiv.innerHTML = "<table border=1><tr><td> Hello! <input type='hidden' value='" + i + "' id='theValue' /><div id='" + divIdName + "'></td></tr></table>";
        ni.appendChild(newdiv);
    }
}

【问题讨论】:

  • 您的脚本似乎不是正确的地方。把它写在 head 部分,然后调用你的函数
  • @vahit。如果您有解决方案,请将其标记为答案

标签: javascript html dom html-table


【解决方案1】:

代码中有&lt;/script&gt;。浏览器将其解释为 javascript 的结束并返回 HTML。要解决此问题,您可以将此字符串划分为例如&lt;/sc'+'ript&gt;。这将解决这个问题,但您可能仍需要在脚本上做一些工作,但这是另一回事。

【讨论】:

    【解决方案2】:

    您必须在不同的引号之间切换,并删除 id 的大括号,如下所示:

    newdiv.innerHTML = "<table border=1>"
        +"<tr>"
        +'<td> Hello! <input type="hidden" value="0" id="theValue" /> '
        +'<script> add(); </script> <div id="' + divIdName + '"> </div> </td>'
        +"</tr>"
        +"</table>";
    

    【讨论】:

      【解决方案3】:

      因为在 dom 中没有任何 evnt 就无法访问该函数。您必须在元素的任何事件上调用该函数。

      【讨论】:

        【解决方案4】:
        1. 将表格元素外的脚本移动到头部或正文的末尾。
        2. 先添加div,再调用脚本。您可能想在&lt;body onload='add'&gt; 中致电您的add()
        3. 删除此处的大括号以创建有效的 html:&lt;div id=('" + divIdName + "')&gt;

        【讨论】:

          【解决方案5】:

          试试这个

          <html>
          <head> <title> Hello </title> </head>
          <script type="text/javascript">
          
              $ctra = 1;
              $ctr1a = 1;
              function add() { 
              alert('s')
              var ni = document.getElementById('myDiv');
              var numi = document.getElementById('theValue');
              var num = (document.getElementById('theValue').value -1)+ 2;
              numi.value = num;
              var newdiv = document.createElement('div');
              var divIdName = 'my'+num+'Div';
              newdiv.setAttribute('id',divIdName);
              newdiv.innerHTML = "<table border=1><tr><td> Hello! <input type='hidden' value='0' id='theValue' /></tr></table>";
              if($ctra<100){
                  ni.appendChild(newdiv);
                  $ctra++;
              }
          }
          
          </script>
          
          <body onload="add()">
          <table border="1">
              <tr>
                  <td> Hello! <input type='hidden' value='0' id='theValue' />
          
                  <div id='myDiv'> </div> </td>
              </tr>
          </table>
          </body>
          </html>
          

          希望它对你有用..:)

          【讨论】:

          • 非常感谢,先生!另一个问题,有没有办法可以像&lt;body onload="add()"&gt; 一样拨打 100 次?我知道即使我永远复制粘贴它也只会调用一次add()。我正在尝试在表 100x 中创建一个表。看来函数内部的if 语句不起作用。
          • 是的。如果您愿意,请通过 For 循环更改您的 if 条件。不需要 if 条件。您可以使用循环迭代该代码。试试这个 for(var i=0;i
          • 已标记。 :) 我明白了。但是,它只是在主表中创建了 100 个不同的表。它必须在表中生成一个表。我很困惑,每次迭代都会改变变量的值吗?
          • 谢谢 :),迭代改变了 i 的值。你的代码在做什么,它在每次迭代中将一个表附加到 MainDiv(ni.append(newdiv) 。如果你想在表中添加表,你需要将 newdiv 附加到最近添加的 div
          • 我认为newdiv.innerHTML = "&lt;table border=1&gt;&lt;tr&gt;&lt;td&gt; Hello! &lt;input type='hidden' value='0' id='theValue' /&gt;&lt;div id='" + divIdName + "'&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;"; 行中的divIdName 已经做到了。 theValue 与此有关吗?有没有办法改变他们的价值观? :)
          【解决方案6】:

          您的 JS 导致嵌套块,这在 html 中是不允许的。您的块中的函数 add() 未定义,因为当浏览器遇到它时,它还没有看到您对 add() 的定义。您的表包含一个脚本,该脚本包含另一个包含另一个脚本的表。这很令人困惑:P

          好的,如果我理解正确的话:你只有一张桌子。你想让 JS 在里面放另一个表。在此示例中,您要放入的内容是表格的副本。您希望最终得到一个表中的一个表,并且您希望以编程方式实现它。

          首先将您的关注点分开:脚本和 html: 如果您将 add() 放在定义之后并将脚本放在正文之后,那么浏览器将遇到它并运行它。 HTH:

          <html>
          <head> <title> Hello </title> </head>
          <body>
              <table id="t1" border=1>
                  <tr>
                      <td> Hello! <input type='hidden' value='0' id='theValue' />
                          <div id='myDiv'></div>
                      </td>
                  </tr>
              </table>
          
          <script>
              function add_table() {
                  var table1 = document.getElementById("t1"),
                      table2 = table1.cloneNode(true),
                      mydiv = document.getElementById("myDiv"),
                      mydiv2;
          
                  table2.setAttribute('id', 't2');
                  mydiv2 = table2.getElementsByTagName("div")[0];
                  mydiv2.setAttribute('id', 'myDiv2');
                  mydiv.appendChild(table2);
              }
              // call the function
              add_table();
          
          </script>
          </body>
          </html>
          

          【讨论】:

          • 是的,先生,这就是我想要做的。 :) 您的代码在表中创建一个表。谢谢!我想做 100 倍。所以我尝试table3.setAttribute('id', 't3'); mydiv3 = table3.getElementsByTagName("div")[1]; mydiv3.setAttribute('id', 'myDiv3'); mydiv2.appendChild(table3); 添加另一个表,使前一个块成为模式。但它不起作用。可以做些什么来解决这个问题?
          • 哎呀!一百次!那可能是不可能的。玩这个:[link]jsfiddle.net/electrophoto/jLBJ4
          猜你喜欢
          • 2017-04-11
          • 1970-01-01
          • 1970-01-01
          • 2014-04-08
          • 2018-02-10
          • 1970-01-01
          • 2018-08-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多