有没有办法在单击按钮后在同一页面上显示内容?

时间:2013-05-27 11:49:51

标签: javascript html

我正在尝试将我的内容显示在与我的按钮相同的页面上。但是当我输入数值并按下显示时,我正在形成的方形显示在新的白色网页上。

我要求用户输入两个值(高度和宽度),我还要求一个字符来形成正方形的边框,但我还没能做到这一点,所以我只是硬编码一个#字符在此期间为边界

我想知道的是如何在同一页面上显示我的方块而不是单独的页面。

我使用外部JavaScript文件:这是它的代码。它名为“SquareScript.js”:

function Display()
{
var a = document.getElementById("value1").value;
var b = document.getElementById("value2").value;
var outputText = "";

for (var i = 0; i < a; i++)
{
outputText += "#";
}

outputText +="<br>";
for (var r = 0; r < b; r++)
{
outputText += "#";


for(var p = 0; p < a-2; p++)
{
outputText +="&nbsp&nbsp";
}
outputText += "#";
outputText +="<br>";
}

for (var i = 0; i < a; i++)
{
outputText += "#";
}

}

这是我的网页代码:

<!DOCTYPE html>
<html>

    <head>
        <link rel = "stylesheet" type = "text/css" href = "Assignment3.css">
        <style>
            table {background-color:white;color:black;}
            body {background-image: url('squares.png');}
        </style>
    </head>

    <body>
        <div class = "heading">
            <h1><img src = "Interested.png" width = 100px height = 100px></img>WELCOME TO BUILD A   SQUARE</h1>
        </div>

        <script src = "SquareScript.js">
        </script>

        <table>
            <tr>
                <td>
                    Please Enter value number 1:&nbsp&nbsp<input type = "text" id = "value1">
                </td>
            </tr>

            <tr>
                <td>
                    Please Enter value number 2:&nbsp&nbsp<input type = "text" id = "value2">
                </td>
            </tr>

            <tr>
                <td>
                    Please Enter a character:&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<input type = "text"     id = "character"> 
                </td>
            </tr>

            <tr>
                <td>
                    <button onclick = "Display()">Display</button>
                </td>
            </tr>
    <div id="output" style = "background-color:blue;"><script>
     document.getElementById("output").innerHTML(outputText);
    </script></div>

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

任何有用的提示将不胜感激,请考虑我仍然是Web开发的新手,所以我的代码显然是非常基本的。如果您对我有任何需求,请告诉我。

2 个答案:

答案 0 :(得分:1)

请勿使用document.write。在您的页面上创建<div id="result"></div>并将输出放在那里。您应该创建一个包含HTML输出的字符串变量。然后,您可以使用以下代码显示此HTML:

document.getElementById("result").innerHTML = my_html_output;

答案 1 :(得分:1)

document.write()的工作方式是,当它在HTML页面外部调用时,它会自动创建一个新文档并写入该文档(请参阅documentation)。这就是你的情况:该函数在HTML之外调用(在SquareScript.js中),因此它正在创建一个新文档,这是你正在看到的“新的白色网页”。

您可以通过在HTML页面中调用document.write()来解决此问题。或者您可以放弃使用document.write(),而是引用现有页面上的元素(更灵活的解决方案)。通过在HTML中创建功能输出的新元素(如<div id="output"></div>),您可以使用document.getElementById("output")将脚本的输出放入该元素中。

每次要添加内容时都不需要调用此方法。相反,创建一个新变量以在生成时保存输出文本。

var outputText = "";

然后,当您浏览循环时,可以添加到outputText

for (var i = 0; i < a; i++) {
    outputText += "#";
}

然后在完成所有循环之后,您可以通过将以下函数调用作为div函数中的最后一项来将内容插入到输出display()中:

document.getElementById("output").innerHTML(outputText);