我有一堆包含表单的php页面。
我有一些在我开始访问网站之前就已经存在的工作表单 - 它们都按预期工作,所以我使用这些表单来建模我正在编写的新表单。
我不明白的是,在旧的/工作版中,当表单提交且未通过验证时,URL保持原样,即"/form-name.php"
而自从复制这些以来,我的新表单会添加到 URL 中,例如"/表单名称.php?操作=提交"
我在表单中使用与现有表单相同的操作:
<form id="standard" action="?action=submit" method="post" enctype="multipart/form-data">
所有 php 脚本的顶部通过以下方式处理表单
if(isset($_REQUEST['action'])) {
if($_REQUEST['action'] == "submit") {
我注意到的是,现有表单在检查验证时,它们只是弹出回页面顶部 - 而我的新表单,它们实际上刷新页面,就好像它提交,发现错误然后重新加载页面一样。
所以我只是想了解其中的区别,是什么决定了每个表单在提交时的反应。
编辑:更多信息,我将添加以下包含的 js 函数:
$(window).load(function () {
if($("#standard").length != 0) {
$("#standard").validate();
$.metadata.setType("attr", "validate");
}
$("#standard").submit(function() {
var tmpError = false;
// Disability
if($("input[name='disability']:checked").val() =="Yes") {
if($("#disability-text").val() == "") {
$("#disability-text-error").slideDown('fast');
tmpError = true;
} else {
$("#disability-text-error").slideUp('fast');
tmpError = false;
}
}
if(tmpError) { return false; }
});
上面的 .submit 函数中还有更多内容,但我正在查看的字段都没有包括在内。例如,在整个JS中,"文件"字段下方没有提到这一点:
<tr><td><div class="field"><input type="file" size="33" name="file[]" validate="required:true" value="<?=$value['file']?>"><img src="../_images/icons/asterisk.gif" alt="Mandatory" style="margin-left: 10px" /><br />
<label class="error" for="file[]">This field is required</label></div></td></tr>
编辑 我已将其缩小到以下内容:
现有的旧代码使用 jquery 脚本进行验证:
<script type="text/javascript" src="../_import/js/jquery.validate.js"></script>
<script type="text/javascript" src="../_import/js/jquery.metadata.js"></script>
为了向某些字段添加自动完成功能,我添加了:
<script type="text/javascript" src="../_import/js/jquery-1.9.0.js"></script>
<script type="text/javascript" src="../_import/js/jquery-ui-1.9.0.custom.js"></script>
<link rel="stylesheet" type="text/css" href="../_import/js/jquery-ui.css">
和 BAM,这破坏了一些东西 - 当我删除这些包含和我的自动完成功能时,我的新表单现在以相同的方式运行 - 即,它们不会刷新并且没有"?action=submit"添加到 URL。
有没有人经历过这场冲突?
有时程序员不想创建另一个文件来处理请求,所以他只是手动将此 GET 参数添加到表单目标并检查同一页面上的某个位置,如果设置了此参数,以便他知道表单已运行。