如下图,当执行提交操作之前,我们需要对序号,要求完成时间,责任人,措施内容四项进行非空,字符长度及输入内容的类型进行校验.

直接贴样式代码

<div class="wrapper animated fadeInRight">
<form id="form" class="form-horizontal m">
<div class="form-group">
<label class="col-sm-3 control-label ">序号<font class="red"> *</font></label>
<div class="col-sm-8">
<input id="longEventId" col="LongEventId" type="hidden" class="form-control" />
<input id="stepNo" name="stepNoName" col="StepNo" type="number" class="form-control" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">要求完成时间<font class="red"> *</font></label>
<div class="col-sm-8">
<input id="finishTime" name="finishTime" col="FinishTime" type="text" class="time-input form-control"
autocomplete="off" placeholder="要求完成时间" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">责任人<font class="red"> *</font></label> @*<input id="personLiableId" col="PersonLiableId" type="text" class="form-control" />*@
@await Html.PartialAsync("/Areas/SystemManage/Shared/SystemUserIdSelect.cshtml",
new ViewDataDictionary(this.ViewData) { { "Content", "8" }, { "IsMultiple", "false" } })
<input id="userId" name="userIdName" col="PersonLiableId" type="hidden" class="form-control" />
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">改善对策</label>
<div class="col-sm-8">
<textarea id="basicReason" col="BasicReason" class="form-control" style="height:60px"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">措施内容<font class="red"> *</font></label>
<div class="col-sm-8">
<textarea id="stepContent" name="stepContentName" col="StepContent" class="form-control"
style="height:60px"></textarea>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label ">图片</label>
<div class="col-sm-8">
<div id="stepPic" class="img-box"></div>
</div>
</div>
</form>
</div>

下面为文本输入检测代码

<script type="text/javascript">
$(function () {
laydate.render({
elem: '#finishTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm:ss'
}); $('#form').validate({
rules: {
stepNoName: {required: true},
finishTime: {required: true},
userId:{required: true},
stepContentName: {required: true, maxlength: 300 }
}
});
}); function saveForm(index) {
var userI = $("#userId").val();
if (userI == "" || userI == null || userI == undefined) {
ys.msgError("请选择责任人!");
return;
} if ($('#form').validate().form()) {
var postData = $('#form').getWebControls({Id: id });
postData.StepPic = $("#stepPic").imageUpload("getImageUrl");
ys.ajax({
url: '@Url.Content("~/LongEventManage/LongMeasuresManage/SaveFormJson")',
type: 'post',
data: postData,
success: function (obj) {
if (obj.Tag == 1) {
ys.msgSuccess(obj.Message);
parent.searchGrid();
parent.layer.close(index);
}else {
ys.msgError(obj.Message);
}
}
});
}
} </script>

先看下当点击提交的时候的效果图:

当我们点击提交时,序号,要求完成时间,措施内容都提示是必填字段.

因此当提交时,这个表单验证是不会通过的,也就不会执行ajax请求调用提交方法.

if ($('#form').validate().form()) {
var postData = $('#form').getWebControls({Id: id });
postData.StepPic = $("#stepPic").imageUpload("getImageUrl");
ys.ajax({
url: '@Url.Content("~/LongEventManage/LongMeasuresManage/SaveFormJson")',
type: 'post',
data: postData,
success: function (obj) {
if (obj.Tag == 1) {
ys.msgSuccess(obj.Message);
parent.searchGrid();
parent.layer.close(index);
}else {
ys.msgError(obj.Message);
}
}
});
}
}

咱们接着往下实验,如果此时我们输入了措施内容,但是字符大于规定的300长度时,

stepContentName: {required: true, maxlength: 300 }

关于rules的key,其实指向的<input />中的name,之前我选择的是id,但是却没有生效,必须指向他的name名称.

细心的小伙伴,有没有发现,我的完成时间,为什么没有用name,而是还用的id名称?

<input id="stepNo" name="stepNoName" col="StepNo" type="number" class="form-control" />
<input id="finishTime" name="finishTimeName" col="FinishTime" type="text" class="time-input form-control" autocomplete="off" placeholder="要求完成时间" />
 $('#form').validate({
rules: {
stepNoName: {required: true},
finishTime: {required: true},
userId:{required: true},
stepContentName: {required: true, maxlength: 300 }
}
});
});

因为上面的<script>代码中,我使用了layUI框架对时间选择器的修饰导致name没有生效.
laydate.render({
elem: '#finishTime',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm:ss'
});

其实我们从F12也可以看出,完成时间input框他的name也是finishTime.所以还是用的name作为Key.
 
 

JS form表单数据校验及失效情况下的解决方案的更多相关文章

  1. js form表单的校验

    if(!$("#form").validate().form()){ return false;} <元素 class="required">< ...

  2. 表单数据验证方法(一)—— 使用validate.js实现表单数据验证

    摘要:使用validate.js在前端实现表单数据提交前的验证 好久没写博客了,真的是罪过,以后不能这样了,只学习不思考,学的都是白搭,希望在博客园能记录下自己学习的点滴,虽然记录的都是些浅显的技术, ...

  3. SpringBoot表单数据校验

    Springboot中使用了Hibernate-validate作为默认表单数据校验框架 在实体类上的具体字段添加注解 public class User { @NotBlank private St ...

  4. FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置

    安装 pip install fastapi[all] pip install unicorn 基本使用(不能同时支持,get, post方法等要分开写) from fastapi import Fa ...

  5. [JavaScript] 实现简单的表单数据校验功能

    实现表单数据校验功能 因为项目用的UI库功能太少,表单不具备校验功能,所以自己写了一个,只有一个文件. 使用 import { required, email, useValidate } from ...

  6. mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法

    mysql在生产环境下有大量锁表,又不允许重启的情况下的处理办法 满头大汗的宅鸟该怎么办呢? mysql -u root -e "show processlist"|grep -i ...

  7. JS form表单提交的方法

    1.当输入用户名和密码为空的时候,需要判断.这时候就用到了校验用户名和密码,这个需要在jsp的前端页面写:有两种方法,一种是用submit提交.一种是用button提交.方法一: 在jsp的前端页面的 ...

  8. JS form 表单收集 数据 formSerialize

    做后台系统的时候通常会用到form表单来做数据采集:每次一个字段一个字段的去收集就会很麻烦,网站也有form.js插件可以进行表单收集,并封装成一个对象,通过ajax方法传到后台:现在介绍一种直觉采集 ...

  9. js form 表单属性学习

    一.<form></form>标签      引用借鉴:http://www.cnblogs.com/fizx/p/6703370.html form标签的属性规定了当前网页上 ...

  10. js——form表单验证

    用js实现一个简易的表单验证 效果: 代码: <html> <head> <title>js校验form表单</title> <meta char ...

随机推荐

  1. Task记录2.ContinueWith 延续任务,等待上一个任务执行完毕

    Task.Run(() => {for (int i = 0; i < 20; i++) { Console.WriteLine(i); } } }).ContinueWith(NewTa ...

  2. mysql19-锁

    1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性. ...

  3. 后台管理系统带关闭的选项卡(多标签页)功能 适配bootstrap3和4 Bootstrap Hover Dropdown

    眼看着是不是很熟悉,其实基本大部门后台管理系统都有这个功能,使用iframe实现展示标签页面. 主要功能:标签页点击,添加标签页,向左滚动标签页,向右滚动标签页,刷新当前标签页,关闭当前标签页,关闭其 ...

  4. C++练习5 对引用进行初始化

    1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 const int cInt = 3;//定义常量cInt并 ...

  5. 安卓逆向4.xpsoed hook构造方法

    大纲 获取所有类 获取所有字段 或者所有方法 1.获取所有类 并打印 2.遍历所有字段 3.遍历所有方法 集合 由于回家了,懒得敲代码,所以就这样了

  6. 安卓逆向 利用JEB进行动态调试断点 进行内购

    1.第一步肯定是需要配置好,连接到模拟器 2.这个程序会弹出支付失败 所以我们搜索一下关键字 看到这里就很兴奋了 我们取JEB里面对这个方法进行断点 if eqz 等于0 这里 看到那个寄存器是v5 ...

  7. 封装avalonia指定组件允许拖动的工具类

    封装avalonia指定组件允许拖动的工具类 创建Avalonia的MVVM项目,命名DragDemo ,然后将项目的Nuget包更新到预览版 <ItemGroup> <Packag ...

  8. 泛型stringToNumber

    C++中将string类型转换为double的方法:#include <iostream>#include <sstream> //使用stringstream需要引入这个头文 ...

  9. fastai fit_one_cycle AttributeError: 'function' object has no attribute 'parameters'

    初学fastai   fit_one_cycle语句报错指向614行, 即: return [p for p in m.parameters() if p.requires_grad] 在以前遇到这种 ...

  10. PKU2506Tiling

    https://blog.csdn.net/Harington/article/details/86612106