【问题标题】:Saving information on HTML page without using variables不使用变量在 HTML 页面上保存信息
【发布时间】:2013-09-21 06:05:13
【问题描述】:

所以我正在尝试创建一个网页,用户可以在其中输入课程信息。页面上有一个添加按钮,如果他们需要更多字段,可以为他们添加另一个文本字段。

按下“添加”按钮后,页面将重置,之前输入的所有信息都将消失。我可以将信息保存在一个数组中,并在按下添加按钮时将信息保存到数组中,然后使用数组中存储的内容重新填充字段。

我的问题是:有没有一种方法可以刷新页面,并将信息保留在文本字段中,而不需要上面提到的漫长过程,是否有一些我可以使用的属性不会删除以前的信息输入?

【问题讨论】:

  • 当他们点击添加按钮时是否需要刷新页面?尝试使用 javascript - 将输入从提交更改为按钮,并添加一个 onclick 处理程序。如果每个项目都与前一个项目相同,您可以克隆前一个项目,在将其附加到 HTML 文档之前删除该值,并在需要时更改名称字段。

标签: javascript php html css storage


【解决方案1】:

如果您编写 HTML5 代码,则可以将 localStorage 与 cookie 一起使用。另外,如果在会话结束后需要删除信息,那么您可以使用 sessionStorage 来代替。

【讨论】:

    【解决方案2】:

    我认为你可以使用 ajax...它在后台运行,没有完成页面重新加载。

    【讨论】:

    • 请先生举个例子
    【解决方案3】:

    假设这个 HTML:

    <form id="course-info-form" action="submit-course-info.php" method="post">
        Professor name: <input type="text" name="professor"><br>
        Additional info:<br>
        <input type="text" name="additional0"><br>
        <input type="submit" value="Submit">
    </form>
    <br>
    <button id="add-button">Add Field</button>
    
    <!-- Use jQuery for DOM manipulation -->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    

    使用 JavaScript / jQuery:

    var courseInfoForm = $('#course-info-form');
    var addButton = $('#add-button');
    
    // Keep track of how many fields there are, so each can have a unique "name" attribute
    var additionalFieldsAdded = 1;
    
    // Whenever "Add Field" is clicked, create another input field
    addButton.on('click', function() {
        var newInput = $("<input>", {
            type: "text"
            name: "additional" + additionalFieldsAdded
        });
        courseInfoForm.append(newInput, "<br>");
        additionalFieldsAdded += 1;
    });
    

    我不太擅长 PHP。在您的 PHP 脚本中,创建一个 while 循环来检查是否有 isset($_POST['additional0']) 和附加 1、附加 2 等,直到您确定没有更多附加字段通过。然后将所有这些额外的细节存储到一个数组中,并按照你认为合适的方式处理它。

    至于您最初的问题,我建议改用我的解决方案。如果您所做的只是每次都添加一个新表单,那么最好避免不必要地重新加载页面。

    我想您可以在单击“添加字段”按钮时捕获“暂时提交”的信息,然后在您的 PHP 脚本中循环遍历所有其他字段并在每次另一个字段时再创建 1 个输入元素添加,并将每个“旧”输入元素的 value 属性设置为“暂时提交”的任何内容。

    因此,要回答您的问题,您可以使用以下命令设置输入字段(服务器端)的默认值:

    // add-course-information.php
    <?php
        $addingField = false;
    
        // Check for the optional "?do=addfield" parameter
        if (isset($_POST['do']) && $_POST['do'] == 'addfield') {
           $addingField = true;
           $fields = array();
           $nextField = 'additional' . count($fields);
    
           // Get each piece of POSTed field data
           while (isset($_POST[$nextField]) && $_POST[$nextField] != '') {
               array_push($fields, $_POST[$nextField]);
               $nextField = 'additional' . count($fields);
           }
        }
    ?>
    
    <!-- Silly HTML! -->
    
    <?php
        // If adding a field, recreate and repopulate all previous fields
        if ($addingField) {
            for ($i = 0; i < count($fields); i++) { ?>
                <input type="text" name="additional<?= $i ?>" value="<?= $fields[$i] ?>">
    <?php   } ?>
            <input type="text" name="additional<?php echo count($fields) + 1 ?>">
    <?php }
        // Otherwise, show the default additional field
        else { ?>
            <input type="text" name="additional0">
    <?php } ?>
    
    <!-- More awesome HTML! -->
    

    可能工作...(目前未经测试。)

    该页面应该做什么(如果它有效)是:

    1. 默认情况下,为用户提供他的初始设置,只有 1 个额外的输入字段“additional0”。
    2. 当用户点击“添加字段”时,?do=addfield应该被POST到add-course-information.php(你可以写那部分),当这个页面接收到do=addfield参数时,它就知道循环通过所有提交的附加字段,并将它们每个存储到一个数组中,然后将所有提交的数据输出回另一个循环的动态生成的&lt;input&gt;元素。

    但我认为这会更加复杂,并且不必要地增加服务器必须执行的处理。如果有人每分钟敲击“添加字段”按钮数十万次,甚至可能被滥用,最终使您的 for 循环迭代数百万次......(除非您对最大字段数施加限制,这很容易。)

    但是,如果可用,您不妨利用客户端的处理能力。

    【讨论】:

    • 首先:感谢您的意见,我非常感谢。 PHP方法就是我说的方法,但是我真的很喜欢javascript的方法,在我走PHP路线之前我会尝试一下。
    • 如果你走 JavaScript 路线,你可以调整我的 PHP 脚本的前半部分($fields、$nextField 和 while-loop),以便处理客户端添加的 n 个附加字段 -一边。
    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多