Hap前端kendoui关于必输等校验的总结

本文详细介绍了HAP前端项目中使用kendoui进行表单和grid验证的方法,包括必填项验证、自定义验证规则及提示信息设置等,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HAP前端kendoui关于必输等校验的总结

项目常用场景

  • 表单:在项目中经常会有表单验证,比如说注册(新增),信息更改(编辑)等等。在HAP项目中也常见到这两种情况,
    比如在模态框(kendoWindow)中的新增、编辑,页面表单信息输入、保存(更改操作)就会用到校验。
  • grid:在grid表格中也无外乎就新增和编辑保存操作时会触发验证行为。

表单验证

表单验证包括了头部信息的验证和模态框中表单信息的验证等等,它们都是一样的。

1. html

    <div id="header_h">
        <div class="row" style="margin-left: 20px;">
            <div class="col-md-1" style="padding: 0px;line-height: 30px">说明</div>
            <div class="col-md-2" style="padding: 0px">
            <input class="k-textbox k-valid" data-bind="value:model.description" id="description" name="description" type="text">
            </div>
            <div class="col-md-1" style="padding: 0px;line-height: 30px">清洗编码</div>
            <div class="col-md-2" style="padding: 0px">
                <input class="k-textbox k-valid" required data-bind="value:model.cleanCode" id="cleanCode" name="cleanCode">
            </div>
        </div>
        <div class="col-md-6 col-md-offset-6" style="margin-top: 10px;margin-bottom: 5px;">
            <button class="btn btn-default btn-success" id="head_save">保存</button>
        </div>
    </div>
在上面代码中我们对清洗编码input进行试验总结:
1. input 中要加 required
2. name 还有个提示作用,比如现在它的必输提示是:cleanCode为必填项
  1. script
    // 自定义错误模板
    var errorTemplate = '<div class="k-widget k-tooltip k-tooltip-validation"' + 'style="margin:0.5em"><span class="k-icon k-warning"> </span>' + '#=message#<div class="k-callout k-callout-n"></div></div>'
    $("#header_h").kendoValidator({
        validate: function(e) {
        },
        //验证样式 默认为default
        invalidMessageType : "tooltip",
        //自定义错误模板
        errorTemplate: errorTemplate
    });
    //----------------------
    var errorTemplate = '<div class="k-widget k-tooltip k-tooltip-validation"' + 'style="margin:0.5em"><span class="k-icon k-warning"> </span>' + '#=message#<div class="k-callout k-callout-n"></div></div>'
        $("#header_h").kendoValidator({
            validate: function(e) {
            },
            //验证样式 默认为default
            invalidMessageType : "tooltip",
            //自定义错误模板
            //errorTemplate: errorTemplate
    });

对整个div加上kendoValidator验证,则里面的所有input标签都加上了验证,上面的例子html中我是删掉了很多input的,效果如图。这两种情况下边框会变红,但是鼠标移入就浮现文字消息,移出则消失:

鼠标移出这里写图片描述
鼠标移入这里写图片描述

验证样式二:
```
var errorTemplate = '<div class="k-widget k-tooltip k-tooltip-validation"' + 'style="margin:0.5em"><span class="k-icon k-warning"> </span>' + '#=message#<div class="k-callout k-callout-n"></div></div>'
    $("#header_h").kendoValidator({
        validate: function(e) {
        },
        //验证样式 默认为default
        invalidMessageType : "default",
        //自定义错误模板
        errorTemplate: errorTemplate
    });
//--------------------
var errorTemplate = '<div class="k-widget k-tooltip k-tooltip-validation"' + 'style="margin:0.5em"><span class="k-icon k-warning"> </span>' + '#=message#<div class="k-callout k-callout-n"></div></div>'
    $("#header_h").kendoValidator({
        validate: function(e) {
        },
        //验证样式 默认为default
        //invalidMessageType : "default",
        //自定义错误模板
        errorTemplate: errorTemplate
    });

```

如图,这两种情况下移入移出都一样,边框不会变红,但是文字提示一直存在,直到输入然后重新校验:
xg2这里写图片描述

验证样式三:
```
 $("#header_h").kendoValidator({
        validate: function(e) {
        },
        //验证样式 默认为default
        invalidMessageType : "default",   
    });

//---------------------
$("#header_h").kendoValidator({
        validate: function(e) {
        },
    });
```

如图,不写验证样式或者写默认的default,都会在input框的右边或者下边(看input后预留的地方的width是否够)出现验证消息
所以,一定要在input的下面预留出地方,以免打乱本来的样式,或者在下面放上span标签:

        //表单验证这里<span>标签用来决定验证信息出现的位置
        <span class="k-invalid-msg" data-for="cleanCode"></span>

xg3这里写图片描述

保存

对头部信息(表单信息)进行保存的时候,基本上业务需求都是点击保存,如果不符合的input框的内容,就会变红或者出现验证消息,这时候只要在保存方法里再调用一次表单验证就好了

    // 保存
        $("#head_save").click(function () {
            var modeljson=viewModel.model.toJSON();
            if(0!=viewModel.model.headerId){
                modeljson.__status='update';//更新
            }else{
                modeljson.__status='add';   //新增
            }
            // 再表单验证一次,true就继续
            if($("#header_h").data("kendoValidator").validate()){   
                if(viewModel.model.targetFileName!='' && viewModel.model.cleanCode!=''
                    && viewModel.model.sourceTableName!='' && viewModel.model.targetTableName!=''){
                    $.ajax({
                        url:BaseUrl +"/v1/organization/dataCleanHeaders/submit",
                        type:"post",
                        data:kendo.stringify([modeljson]),
                        contentType: "application/json",
                        success:function(data){
                            if(data.success){
                                kendo.ui.showInfoDialog({
                                    title: '提示',
                                    width: 400,
                                    message: '保存成功!'
                                });
                            }else{
                                kendo.ui.showErrorDialog({
                                    message: '保存失败'
                                });
                            }
                        }
                    });
                }else{  // 这个else可以不需要了
                    kendo.ui.showErrorDialog({
                        message: '数据清洗头信息未填写完整!'
                    });
                }
            }
        });

自定义验证

如果写了rules规则,那么必输的规则也要加上
     $("#header_h").kendoValidator({
      rules: {
        customRule1: function(input){
            //这里可以写个if语句对指定的input做必输校验
          return $.trim(input.val())!=="";//所有input必输
        },
        customRule2: function(input) {
          // 这里可以定义其他的校验,比如username唯一性校验
          if (input.is("[name=username]")) {
              // 后续代码 校验成功 返回true 否则false
            return false;
          }
          return true;
        }
      },
      messages: {  // 校验的提示消息
        customRule1: "必输",
        customRule2: "username不能重复"
      }
    });

如果不想因为用上面的方法而重写必输校验的规则,其实还可以自己写jquery,在要校验的input后写个放入提示消息并display:none,然后对input写一个change()函数,在函数里对input的value进行验证,如果不符合就让span的display变为block,但一定要注意样式

grid 验证

grid中的验证很简单,首先:在dataSource中的schema里的model的fields中加上验证就好了:

        fields: {
                    connectionName:{
                        validation:{
                            required:true,   //  必输验证  如果只需要必输验证,则下面的自定义验证就不需要写了
                            connectionNamevalidation: function (input) {  //自定义验证:这里是去后台查询进行唯一性验证
                                if (input.is("[name='connectionName']") && input.val()!="") {
                                    //console.log("wlg"+input.val());
                                    input.attr("data-connectionNamevalidation-msg","连接名称不能重复");
                                    //去后台检查
                                    var tf ;   // true/false
                                    $.ajax({
                                        type:"POST",
                                        url:"/v1/load/DBConn/checkName?connectionName="+input.val(),
                                        async: false,  // 同步
                                        success:function (data) {
                                            tf = data ;
                                        }
                                    })
                                    return tf;
                                }
                                return true;
                            }
                        }
                    }
            }

在grid中如果写了eitor函数并在其中append了input标签,则在函数中的input标签里一定要加上 required 属性。

        editor: function (container, options) {
                    $('<input required type="number" class="k-input k-textbox" name="' + options.field + '"/>').appendTo(container);
                }

保存

如果调用的是hap的viewmodel中自带的保存函数,则会在点击保存的时候自动验证gird里的框框

    save: function () {
        $('#grid').data('kendoGrid').saveChanges();
    }

如果是自己写的保存函数,则需要在保存函数里加上验证:

$("save_btn").click(function(){
    if($("#grid").data("kendoValidator").validate()){  // 验证
        // 保存操作
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值