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