【问题标题】:How to cause a form field to be required如何导致需要表单域
【发布时间】:2011-12-02 20:27:24
【问题描述】:

有没有办法让表单提交所需的字段?

我可以使用 HTML、Javascript 或 PHP 来执行此操作 - 无论哪个有效。

我想确保提交的表单不包含空白值。如果我能做到让用户必须在某些字段中输入值,那就太好了。

编辑:我现在真的不想使用 jQuery,因为我不确定我的老板是否希望我使用 jQuery。

尝试这样做:

<script type="text/javascript">
    $('addorg').submit(function(){
    if($('orgname').val()==""){
        alert("Organization Name must be Filled");
        return false;
    }
})
    </script>

这是它正在处理的 HTML:

<form name="addorg" action="addorg.php" enctype="multipart/form-data" method="POST">
    <div id="orgdiv"> <fieldset><label for="orgname">Organization Name</label>
            <input type="text" name="orgname" id="orgname"/>
        </fieldset>
    </div>

这是用于客户端验证。我可以处理服务器端验证,我的 PHP 比我的 Javascript 或 jQuery 好得多。

客户端验证似乎不起作用。

【问题讨论】:

  • 您可以使用 JavaScript 进行客户端验证,将您的代码挂钩到表单的 onsubmit 事件。并使用 php 在服务器上再次验证,以确保用户不只是禁用 JavaScript 以通过您的验证。
  • 请务必始终使用 PHP(或您选择的语言)在服务器端验证您的表单,因为用户可以在浏览器中关闭 javascript。 js是一个奖励。
  • 不需要整个 DOM 库来简单地验证输入。
  • @RightSaidFred 这是一个很好的观点。
  • Freds 之战@RightSaidFred Jquery 不是强制性的。只需 3 行代码就能完成 20 行原版 JS 的工作。

标签: php javascript html


【解决方案1】:

没有什么能阻止表单被提交到您的网络服务器。您可以使用 Curl 等工具提交您喜欢的任何内容。因此,您必须始终在服务器上进行验证。对于普通用户,您可以在页面中放置 JavaScript 来阻止提交无效表单。

因此:

有没有办法让表单提交所需的字段?

没有。

我想确保提交的表单不包含空白值。如果我能做到让用户必须在某些字段中输入值,那就太好了。

你不能。但是,@Nicolas 的回答显示了如何添加客户端验证以阻止 典型 用户提交表单和服务器端验证以阻止其他所有内容。他的做法是正确的。

【讨论】:

  • @TimG 我觉得这是塔木德重要性的答案:)
  • 你忘了回答 OP 的问题。
  • 实际上我确实按照要求回答了这个问题。不过,@Nicolas 的帖子回答了更好的问题,即“我如何处理缺少必填字段的表单。”
【解决方案2】:

您可以在 JavaScript 或 PHP 中执行此操作。 JS 对用户更友好,更容易编码,但可以被确定的用户绕过。它也可能无法在某些浏览器上运行,或者在某些设置允许用户继续进行时,就好像没有验证一样,但这些情况通常很少见。我会推荐一个 JS 解决方案,除非这是一个公司网站或没有出错的余地。

您可以通过使用 onSubmit 函数修改表单标签来做到这一点:

 <form action="whatever" method="post" onSubmit="checkStuff();">
      <input id="field_1" name="field_1"...>

然后您需要创建该函数并将其放在页面的顶部。它应该是这样的:

 function checkStuff() {
      // By default, we plan to submit the form.
      var formOkay = 1;

      // Check to see if field_1 has a value.  If not, we note that by changing our variable.
      if (document.getElementById('field_1').value == '') formOkay = 0;
      ...

      // Let the user know something is wrong somehow.  An alert is easiest.
      alert('fill out everything, ya goof!');

      // If you return true the form will submit.  If you return false it will not.
      if (formOkay == 1) {
           return true;
      } else {
           return false;
      }
 }

请注意,您的输入必须具有 id 属性才能使这种方法起作用(尽管也可以修改我的代码以使用名称)。我会让 id 与字段名称的值相同。您可以为我放置省略号的更多字段添加额外检查。这段代码可以更高效、更简洁地编写,但我认为这种方法最容易理解和修改。

这不是我的想法,还没有经过测试,但应该能让你走上正确的道路。如果您还有其他问题,请告诉我。

编辑: 我只是想跟进以同意其他人的意见,如果您有时间和意愿,或者这是与工作相关的问题,您应该验证两种方式。 JS 提供了一种更好、更用户友好的方法,而 PHP 确保没有人可以绕过 JS 来破坏您的规则。

我不懂 PHP,但你的伪代码应该是这样的:

 if field_1 = "" then
      // Option 1
      Print("Please press back and fill out field 1!")
      AbortPage()
      // Option 2
      Redirect("form.php?error=Please fill out field 1&[other form values]")
 end if

在选项 2 的情况下,您将修改表单页面以检测 url 变量并将它们放入输入中。您还可以对其进行修改以查找名为“错误”的 url 变量并在找到时显示内容。

【讨论】:

  • 如果你没有在服务器上验证你没有验证 - 你只是友好。坏数据不需要朋友,它需要一个坚定的看门人来远离你的应用程序
  • 蒂姆,这完全取决于应用程序。大多数网站都是“为了好玩”,更强大的 Web 应用程序通常让开发人员非常熟悉(因此不太可能询问)这类东西。所以 JS 验证在大多数情况下是完全可以接受的。
  • 这是给我们的一个非营利组织客户的。这是我在公司的第一个实际编程项目,我有一名高级编码员来查看我遇到的任何问题,还有一名错误测试员。这是发现的错误之一。
  • 我明白了;我很抱歉。然后我会推荐客户端和服务器端验证。必须在你的第一个任务中覆盖你所有的基础。 ;) 祝你好运!
  • Hrm,您的代码似乎不起作用 - 当我尝试使用空白名称提交时,它没有提醒我。
【解决方案3】:

Javascript 应该很容易做到。这是 jquery 中的一个示例。

<input id="required" type="text />

然后,在你的 javascript 库中,你有类似的东西:

if($("#required").val().length!=0)
{
    formsubmit();
}
else
{
    alert("You left the required field blank");
}

【讨论】:

    【解决方案4】:
    $('form').submit(function(){
        if($('thisemptyfield').val()==""){
            //do stuff
            return false; //will cancel form submission
        }
    })
    

    如果thisemptyfield为空,则取消表单的提交。我鼓励竖起一个标志,告诉您的用户在提交之前填写该字段。因为仅使用该代码,页面上不会发生任何事情。它只是在提交表单并在字段中包含值之前不会提交。

    编辑:这是使用 jQuery。

    【讨论】:

    • 你缺少几个选择器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2016-07-14
    • 2016-09-05
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多