Javascript在同一页面上显示innerHTML

Posted

技术标签:

【中文标题】Javascript在同一页面上显示innerHTML【英文标题】:Javascript display innerHTML on the same page 【发布时间】:2021-04-17 10:20:07 【问题描述】:

所以我正在测试 D3.js 的置换功能,它工作得很好。 我遇到的问题是使用 innerhtml 在同一页面上显示结果,它总是重新加载以便显示。 我可能在这里遗漏了一个细节,有人可以帮忙吗?

permute.html:

<html>
 <head>
 <meta charset="UTF-8">
 <script language="javascript">
 function* permute(keys) 
    var size = keys.length,
        c = Array(size).fill(0),
        i = 1;
    yield keys;
    while (i < size) 
        if (c[i] < i) 
            var k = i % 2 && c[i];
            [keys[i], keys[k]] = [keys[k], keys[i]];
            c[i]++;
            i = 1;
      yield keys;
     else 
      c[i++] = 0;
    
  


function showPermutations()
    var input = document.getElementById("keys").value;
    document.getElementById('results').innerHTML=input;
    for (var words of permute(input.split(/\s+/))) 
        document.write(words.join(''));
        document.write("<br>");
    

</script>

<body>
  <form>
    <label><b>Keywords</b></label></br>
    <input type="text" id="keys" name="keys"></br>
  </form>
    </br>
<input type="submit" value="Permute" onclick="showPermutations();"></br>
<p><span id='results'></span></p>
</head>
</body>
</html>

你们中的一些人指出问题是由提交按钮引起的,但在另一个示例中,使用提交,JS 在同一页面上工作得很好:

test.html

<html>
  <head lang="en">
  <meta charset="UTF-8">
  <script language="JavaScript">
    function showInput() 
        document.getElementById('display').innerHTML = 
                    document.getElementById("user_input").value;
    
  </script>

  </head>
<body>

  <form>
    <label><b>Enter a Message</b></label>
    <input type="text" name="message" id="user_input">
  </form>

  <input type="submit" onclick="showInput();"><br/>
  <label>Your input: </label>
  <p><span id='display'></span></p>
</body>
</html>

【问题讨论】:

我能看到的第一件事是你没有关闭你的&lt;head&gt;标签.. ;) 谢谢,已编辑。但这绝对不是导致问题的原因:) 通过您的编辑,您现在在&lt;head&gt; 标记内有一个&lt;body&gt; 标记。那是无效的。无论如何,如果您不想提交输入元素,请不要将它们放在&lt;form&gt; 标签内。 或者阻止表单提交,而不是&lt;input type=“submit” /&gt;使用&lt;button type=“button”&gt;? 也不行 【参考方案1】:

当您单击提交按钮时,页面将自动重新加载。您应该通过调用传递给事件处理程序的事件对象的preventDefault 方法来防止这种情况发生,在您的情况下,该处理程序将是showPermutations

使该函数接收一个参数,称为eevevent(通常称为)并在其中执行preventDefault 方法,然后再执行其他任何操作。

function showPermutations(e)
   e.preventDefault();
   ...

或者不要使用提交按钮。

【讨论】:

"当您点击提交按钮时,页面会自动重新加载。" 当按钮不在表单内时,则不是这样,这里似乎就是这种情况。此外,preventDefault 仅适用于提交事件,而不适用于点击事件。 我使用了函数参数 showPermutations(e) console.log(typeof e.preventDefault); ..但它仍然无法正常工作。使用按钮而不是提交也不起作用。您可以将代码复制并粘贴到 html 文件中并尝试一下。有什么想法吗?

以上是关于Javascript在同一页面上显示innerHTML的主要内容,如果未能解决你的问题,请参考以下文章

您可以从同一站点定位 iFrame 中的元素吗?

同一页面的javascript的变量怎么在页面中显示

在同一页面显示多个JavaScript统计图表

wget + JavaScript?

如何在同一页面上隔离不同的 javascript 库?

在同一页面上将javascript变量传输到php而不提交