不使用变量在HTML页面上保存信息

时间:2013-09-21 06:05:14

标签: javascript php html css storage

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

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

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

3 个答案:

答案 0 :(得分:1)

如果您对HTML5进行编码,则可以使用localStorage来回退Cookie。此外,如果在会话结束后删除信息,则可以使用sessionStorage。

答案 1 :(得分:0)

假设这个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'])和additional1,additional2等,直到您确定没有其他字段传递。然后将所有这些额外的细节存储到一个数组中,并按照您认为合适的方式处理它。

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

我想您可以在单击“添加字段”按钮时捕获“暂时提交”的信息,然后在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应该发布到add-course-information.php(您可以编写该部分),当此页面收到do = addfield参数时,它就会知道循环遍历所有提交的附加字段,并将每个字段存储到一个数组中,然后将所有提交的数据输出回另一个循环的动态生成的<input>元素。
  3. 但我认为这会复杂得多,并且会不必要地增加服务器必须执行的处理。如果有人每分钟敲击“添加字段”按钮数十万次,甚至可能会被滥用,最终使你的for循环迭代数百万次......(除非你对最大字段数施加限制,这很容易。)

    但是,您可以利用客户端的处理能力(如果可用)。

答案 2 :(得分:0)

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