【问题标题】:Clear a form that remembers values清除记住值的表单
【发布时间】:2012-04-11 19:17:06
【问题描述】:

我有一个表单,其中包含一些用户详细信息,并允许他们上传文件。文件名和信息保存到 csv 文件中。

如果用户没有填写所有字段,表单会要求他们填写并重试。我希望它记住用户输入的值,所以我使用 php 设置表单字段的默认值:

value="<?php print $fulltitle;?>"

其中 $fulltitle = $_POST['fulltitle'];

但是,如果用户提交内容失败,点击重置不会清除表单,它会返回他们之前的尝试。

如何使重置功能起作用?在我尝试使用的重置按钮中

onclick="<?php $fulltitle='' ?>"

但似乎没有效果,我猜是因为在您点击重置时PHP已经处理完毕。

有人有什么建议吗?


编辑:

感谢您的帮助,我按照建议通过简单的重新加载解决了这个问题。 对于任何寻找问题答案的人:

我放了一个重置​​按钮:

<FORM METHOD="LINK" ACTION="resetform.php">
<INPUT TYPE="submit" VALUE="Reset">
</FORM>

在文件 resetform.php 我有:

<?php
$firstname = '' ;
$lastname = '' ;
$fulltitle = '' ;
$email = '' ;
// etc.

header("Location: submitfile.php");
?>

其中 submitfile.php 是表单

/编辑


修剪后的代码如下...

标题:

<?php
//error_reporting(E_ALL & ~E_NOTICE);
$message = false;

if(isset($_POST['Submit'])){

//user input with commas and < stripped:
    $firstname = str_replace("<","",str_replace(",",";",$_POST['firstname']));

//if values missing, dont process:
    if(empty($firstname)){
        $message =  '<span style="color:red;text-align:center;">Please complete all required(*) fields,<br />and check the file has been selected correctly.</span>';
        $aClass = 'errorClass';
    }

else {
    //return data array cvsData from user input

    $cvsData = $firstname
    fwrite($fp,$cvsData);
    fclose($fp);
    //reset form
    $firstname = '' ;           
    $message = '<span style="color:blue;text-align:center;">Submission successful, thank you.</span>'; 
    }

}
//if page reloaded, clear form:
else {
    $firstname = '' ;
    }

?>

主体:

<form enctype="multipart/form-data" id="form1" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" >
<table>
<?php
if ($message != false)
    {
    print "<tr><td colspan='2'><span align='center'>" . $message . "</span></td></tr>";
    }
?>  

<tr>
    <td width="200"><span class="texto">*First Name(s)</span></td>
    <td><input type="text" name="firstname" id="firstname" value="<?php print $firstname;?>" /></td>
</tr>

<tr>
    <td colspan="2">
        <div align="center">
            <input type="submit" name="Submit" id="Submit" value="Submit"/>
            <input type="reset" name="Reset" id="Reset" value="Reset" />
        </div>
    </td>
</tr>
</table>

【问题讨论】:

标签: php html


【解决方案1】:

点击重置只会将表单重置为其原始值。在您的情况下,这是它们的原始表单提交值,因为这是您在 value 属性中设置的值。如果要向用户显示空白表单,则需要使用 JavaScript 将表单值完全删除。

这是一个应该做的 JavaScript sn-p:

function clear_form_elements(ele) {

    tags = ele.getElementsByTagName('input');
    for(i = 0; i < tags.length; i++) {
        switch(tags[i].type) {
            case 'password':
            case 'text':
                tags[i].value = '';
                break;
            case 'checkbox':
            case 'radio':
                tags[i].checked = false;
                break;
        }
    }

    tags = ele.getElementsByTagName('select');
    for(i = 0; i < tags.length; i++) {
        if(tags[i].type == 'select-one') {
            tags[i].selectedIndex = 0;
        }
        else {
            for(j = 0; j < tags[i].options.length; j++) {
                tags[i].options[j].selected = false;
            }
        }
    }

    tags = ele.getElementsByTagName('textarea');
    for(i = 0; i < tags.length; i++) {
        tags[i].value = '';
    }

}

然后把它放在你的重置按钮中:

onclick="clear_form_elements(this.form[0])"

【讨论】:

  • 谢谢,我会使用重置按钮“onclick”属性调用该函数还是有更好的方法?
  • 另一个选项只是重新加载页面(并让 PHP 以其原始形式输出)。
  • 这样的?
  • @ralph346526 我把你的重置按钮的 sn-p 放在我的答案中。我有一段时间没有编写“真正的”javascript,所以如果它不起作用,请告诉我,我会纠正它。 NullUserException 和 ralph346526 的回答都是好主意,值得考虑。
  • 更新了问题,提供了一个避免使用 Java 但需要重新加载页面的解决方案。谢谢大家!
猜你喜欢
  • 2012-12-08
  • 2012-05-13
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多