【问题标题】:JS validation doesn't run after I enter a valid input and submit the form with rest of the input fields empty在我输入有效输入并提交其余输入字段为空的表单后,JS 验证不运行
【发布时间】:2017-03-01 08:27:05
【问题描述】:

我正在开发一个 Web 目录,其中一个页面上有一个表单。使用了JS验证插件。在不填写任何输入字段的情况下提交表单时,表单会按预期在每个输入字段下方抛出错误!但是提交只填写一个输入框的表单会刷新当前页面,因为操作值设置为当前页面,其中包含 PHP 代码,而不是停留在同一页面上继续为其余字段抛出错误尚未填写!我在网上搜索过,找不到任何有用的东西来找出脚本出了什么问题。有人可以在这里查看下面的代码并推荐最佳解决方案吗?谢谢。

$(document).ready(function()  {
    $("#userForm").validate({
        rules: {
            cname: {
                required: true,
                lettersonly: true,
                minlength: 3
            },
            cemail: {
                required: true,
                email: true
            },
            cphone: {
                required: true,
                number: true,
                minlength: 10,
                maxlength: 10
            },
            cbusiness: {
                required: true,
                url: true
            },
            cbcategory: {
                required: true,
                minlength: 6
            },
            curl: {
                required: true,
                minlength: 6
            },
        },
        messages: {
            cname:  "Please enter your name",
            cemail: "Please enter a valid email address",
            cphone: {
                required: "Please enter your phone number",
                number:   "Please enter only numeric value"
            },
            cbusiness: {
                required: "Please enter your business",
                },
            cbcategory: {
                required: "Please enter a business category",
                },
            curl: {
                required: "Please enter the URL to your website",
                },
            }
    });
});

表格如下。

<form action="" method="post" name="userForm" id="userForm">

                            <input type="text" name="cname"  id="cname" placeholder=" Your Name">
                            <input type="text" name="cemail" id="cemail" class="email" placeholder="Your Email">
                            <input type="text" name="cphone" id="cphone" placeholder="Your Phone">
                            <input type="text" name="cbusiness"  id="cbusiness" class="email" placeholder=" Your Business">
                            <input type="text" name="cbcategory" id="cbcategory" placeholder="Business category">
                            <input type="text" name="curl" id="curl" class="email" placeholder="URL"><br>       

                            <label for='message'>Enter the code in the box below : </label>
                            <img src="captcha.php?rand=<?php echo rand();?>" id='captchaimg'>
                            <input type="text" id="captcha_code" name="captcha_code">

                            <input type="submit" name="Submit" id="Submit"  value="Submit" class="button1"><br>
                Can't read the image? click <a href='javascript: refreshCaptcha();'>here</a> to refresh.
                        </form>

【问题讨论】:

  • 请编辑问题并添加 What you wantWhat you get

标签: javascript php jquery jquery-validate


【解决方案1】:

假设您已正确包含验证库,您将必须为所有验证类型设置消息,例如:

messages: {
  cname: {
     required: "Please enter your name",
     lettersonly: "Letters only",
     minlength: "Min length 3 required"
  },
  cemail: {
    required: "Please enter a valid email address",
    email: "Invalid email"
  }
}

工作JSFIDDLE

你必须像这样包含插件文件:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/additional-methods.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.js"></script>

更新

在与 OP 聊天讨论后,我们得出的结论是插件文件必须正确包含,并且他使用的 jQuery 版本(v 1.7.1)与插件版本(v 1.16.0)不兼容)。所以我们不得不为lettersonly添加一个自定义方法。

自定义方法代码:

jQuery.validator.addMethod("lettersonly", function(value, element) {
  return this.optional(element) || /^[a-z]+$/i.test(value);
}, "Letters only please");

【讨论】:

  • @lonut,感谢您的建议。我已按照建议设置消息,但问题仍未解决。例如,当我在名称字段中输入数字时,错误消息不会从“请输入名称”变为“仅限字母”。所有输入字段的错误消息似乎都停留在“必需的错误消息”中。有什么建议吗?
  • @Pramod,对不起,我的错误。当我进行一些调试时,我忘记为名称添加 letteronly 和 minlength 所需的选项。我已经在我的答案中更新了指向小提琴的链接。现在请看。您可以在 jsfiddle 中看到它正在工作。如果在您的项目中不起作用,请检查您的控制台是否有错误。
  • @lonut。非常感谢。我想我们快到了。在查看了 JSFIDDLE 之后,我完全按照您的做法做了。当我在名称字段中输入数字时,它没有抛出“仅字母错误”。其他领域似乎接受了它们的含义。
  • @Pramod,不客气。乐意效劳。你说I think we are almost there.那么还有什么问题吗?您需要进一步的帮助吗?
  • @lonut,你帮了大忙。我现在通过验证成功了 90%。我看到我需要确保错误消息对应于用户输入的无效数据。名称字段发生的情况是 1. 如果输入 2 个字母,它会显示“请输入您的姓名”而不是最小 3。2. 如果输入数字为 123654,它仍然会显示“请输入您的姓名”而不是仅字母“ . 3. 当我输入正确的姓名为 Pramod 时,它仍然显示消息为“请输入您的姓名”。再次感谢您的时间。
猜你喜欢
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2023-03-14
  • 2020-09-06
  • 1970-01-01
相关资源
最近更新 更多