Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用JQuery验证验证字段而不进行任何提交?_Jquery_Jquery Validate - Fatal编程技术网

是否使用JQuery验证验证字段而不进行任何提交?

是否使用JQuery验证验证字段而不进行任何提交?,jquery,jquery-validate,Jquery,Jquery Validate,我有一个HTML5Web应用程序,其中有许多用户输入的字段,我想在将这些字段发送到服务器之前,用javascript对这些字段进行一些客户端验证。简单,对吗?只需使用JQuery验证插件-- 但有一个陷阱。我的web应用没有表单。HTML中没有任何提交。相反,在每个用户可更改的元素上都有一个JQuery更改处理程序,当用户更改其中一个元素的值时,就会进行AJAX调用。(这种非标准的用户交互体系结构对于该应用程序很有意义。) 我希望在AJAX调用之前验证字段,并使用JQuery验证插件来完成这项工

我有一个HTML5Web应用程序,其中有许多用户输入的字段,我想在将这些字段发送到服务器之前,用javascript对这些字段进行一些客户端验证。简单,对吗?只需使用JQuery验证插件--

但有一个陷阱。我的web应用没有表单。HTML中没有任何提交。相反,在每个用户可更改的元素上都有一个JQuery更改处理程序,当用户更改其中一个元素的值时,就会进行AJAX调用。(这种非标准的用户交互体系结构对于该应用程序很有意义。)

我希望在AJAX调用之前验证字段,并使用JQuery验证插件来完成这项工作。但我不知道怎么做


是否可以使用JQuery验证插件而不在任何地方提交?我该怎么做?还是另一种方法更好?

要使用验证插件,您必须将字段包装在一个表单中,这是一个很好的选择。此外,您还可以通过编程方式调用插件的验证,并通过执行以下操作检查表单是否有效:

var $form = $('#your_form'),
    validator = $form.validate({...});

//validate the form
validator.form();

//check if the form is valid 
if ($form.valid()) {
    //form is valid
}

有关更多选项,请首先查看。

,最重要的是,您必须将输入元素包装在
标记中,jQuery验证插件才能运行。但是,不需要“提交”按钮

其次,您可以通过编程触发任何或所有元素的有效性测试,而无需使用提交按钮


演示

我创建了一个小助手。只需添加这行代码,就可以在任何地方使用任何按钮

$("body [data-submit-form]").on("click", function (event) {
    $("#" + $(event.target).data('submit-form')).valid();
});

<form id="component-form">

</form>

<button data-submit-form="component-form">Button</button>

将此代码用于两个示例字段电子邮件和密码:-


文件
#txt1{
左边距:23px;
边界半径:12px;
}
#txt2{
边界半径:12px;
}
#btn1{
边界半径:12px;
宽8米,高2米;
光标:指针;
背景色:#008CBA;
}
#lbl1,#lbl2{
字体系列:“漫画无MS”,草书,无衬线;
颜色:红色;
}
电子邮件:
密码:

$(文档).ready(函数(){ $('#btn1')。单击(函数(){ var email=$('#txt1').val(); var pass=$('#txt2').val(); 如果(电子邮件=“”){ $('input[type=“text”]).css(“边框”,“2px实心红色”); $(“#txt1”).parent()。之后(“请输入电子邮件地址”); 警报(“hi”); } 否则{ } 如果(通过=“”){ $('input[type=“password”]').css(“边框”,“2px实心红色”); $(“#txt2”).parent()之后(“请输入密码”); } $('input[type=“text”]”)。向下键(函数(){ $('input[type=“text”]').css(“border”,”); $(“.validation”).remove(); }); $('input[type=“password”]).keydown(函数(){ $('input[type=“password”]).css(“border”,”); $(“.validationp”).remove(); }); }); });
只需使用
jquery调用表单提交方法

$("#formId").submit()

这将验证整个表单,与单击提交按钮时相同

将对象分配给变量的目的是什么?当您只需调用
$(“#您的#表单”).validate()
$(“#您的#表单”).valid()时,保存两个字符的附加行似乎很冗长。(另外,您根本不需要调用
validator.form()
)@Sparky,有几种方法只能在从
validate
函数返回的验证器上调用,因此如果需要,最好保留对它的引用。另外,总是重新查询DOM以获得多次引用的元素是一种不好的做法。是的,但在这种情况下,有一种可用的方法称为
.valid()
,它消除了跟踪
.validate()
的需要。另外,我不确定jQuery不再查看DOM的好处是否值得额外添加40多个字符。不管怎样,我想我们是在吹毛求疵,因为这里没有什么技术上的错误!
$("body [data-submit-form]").on("click", function (event) {
    var form = $("#" + $(event.target).data('submit-form'));
    if (form.valid()) {
        form.submit();
    }
});
<head>
    <script src="jquery-3.4.0.min.js"></script>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #txt1{

        margin-left:23px;
        border-radius: 12px;
       }
       #txt2{
        border-radius: 12px;
       }
       #btn1{
        border-radius: 12px;
        width: 8em;  height: 2em;
        cursor:pointer;
        background-color: #008CBA;
       }
       #lbl1,#lbl2{
        font-family: "Comic Sans MS", cursive, sans-serif;
        color:red;
       }
    </style>
</head>

<body>
    <div class="container">
        <form>
            <center> <label id="lbl1">Email: </label><input type="text" id="txt1"></center></input><br>
            <center><label id="lbl2">Password: </label><input type="password" id="txt2"></center></input>
            <br><br>
            <center><input type="button" id="btn1" name="btn1" value="Login" style="color:darkblue;font-size:15px;"></center></input>
        </form>

    </div>
    <script>
        $(document).ready(function () {
            $('#btn1').click(function () {
                var email = $('#txt1').val();
                var pass = $('#txt2').val();
                if (email == '') {
                    $('input[type="text"]').css("border", "2px solid red");
                    $("#txt1").parent().after("<div class='validation' style='color:red;margin-left:93px;'><center>Please enter email address</center></div>");
                    alert("hi");
                }
                else {

                }
                if (pass == '') {
                    $('input[type="password"]').css("border", "2px solid red");
                    $("#txt2").parent().after("<div class='validationp' style='color:red;margin-left:70px;'><center>Please enter password</center></div>");
                }
                $('input[type="text"]').keydown(function () {
                    $('input[type="text"]').css("border", "");
                    $(".validation").remove();
                });
                $('input[type="password"]').keydown(function () {
                    $('input[type="password"]').css("border", "");
                    $(".validationp").remove();

                });

            });
        });

    </script>
</body>

</html>
$("#formId").submit()