jquery自定义表单验证插件


Posted in Javascript onOctober 12, 2016

本文实例为大家分享了jquery表单验证插件,供大家参考,具体内容如下

//正则表达式
var map = new Map();
map.put("*", /[\w\W]+/);
map.put("*6-16", /^[\w\W]{6,16}$/);
map.put("n", /^\d+$/);
map.put("n6-16", /^\d{6,16}$/);
map.put("s", /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]+$/);
map.put("s6-16", /^[\u4E00-\u9FA5\uf900-\ufa2d\w\.\s]{6,16}$/);
map.put("p", /^[0-9]{6}$/);//邮编
map.put("m", /^13[0-9]{9}$|14[0-9]{9}|15[0-9]{9}$|18[0-9]{9}$/);//手机号码
map.put("e", /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/);//email
map.put("url", /^(http|https):\/\/(\w+:\/\/)?\w+(\.\w+)+.*$/);//url地址
map.put("image", /^(http|https):\/\/.*(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png)$/);//图片
map.put("integer", /^[1-9]\d*$/);//大于0的正整数
map.put("hj", /(\S*?) [^>]*>.*?<\/\1>|<.*?/);//过滤html标签和javascript标签


(function($,win){
 Validform = {
 matchReg : function(datatype){
  //匹配返回正则表达式 有3个比较特殊 所有特殊处理一下
  //这3个是因为有长度判断 要动态修改正则表达式
  var reg1 = /^\*\d{1,}-\d{1,}$/;
  var reg2 = /^n\d{1,}-\d{1,}$/;
  var reg3 = /^s\d{1,}-\d{1,}$/;
  if(reg1.test(datatype) || reg2.test(datatype) || reg3.test(datatype)){
  //把开始长度和结束长度截取出来
  var index = datatype.indexOf("-");
  var nums =new Array();
  nums[0] = datatype.substring(1,index);
  nums[1] = datatype.substring(index+1,datatype.length);
  //替换数字
  var reg;
  switch (datatype.substring(0,1)) {
  ///^[\w\W]{6,16}$/
  case "*": reg = new RegExp("^[\\w\\W]{"+nums[0]+","+nums[1]+"}$"); break;
  case "n": reg = new RegExp("^\\d{"+nums[0]+","+nums[1]+"}$"); break;
  case "s": reg = new RegExp("^[\\u4E00-\\u9FA5\\uf900-\\ufa2d\\w\\.\\s\\\\/]{"+nums[0]+","+nums[1]+"}$"); break;
  }
  return reg;
  }else{
  return map.get(datatype);
  }
 }
 }
})(jQuery,window);

 HaHaUtil = {
  checkFrom : function(formId){
  var form = $("#"+formId)[0];
  //遍历表单下面的元素
  for(var i=0;i<form.length;i++){
   if(!HaHaUtil.resultCheck(form[i])){
   return false;
   }
  }
  return true;
  },
  resultCheck : function(obj){
  var tagName = obj.tagName;
  switch(tagName)
  {
  case "INPUT": 
  case "TEXTAREA": 
   $item = $(obj);
   var dataType = $item.attr("dataType");
   //没有验证标签 就不校验了
   if(dataType == null){
   return true;
   }else{
   //获取 dataType 可以有多个验证用|分割开
   var reType = dataType.split("|");
   //把表单值前后的空格去掉
   var f_value = $item.val();
   if(f_value.indexOf(" ")!=-1){
    //说明有空格 也有可能中间有空格 中间有空格就不会去掉
    $item.val($.trim(f_value));
   }
   var tipId = $item.attr("tipId");
   $("#"+tipId).html("");

   for(var i=0;i<reType.length;i++){
    //如果第一个正则是 empty 说明是可以没值
    //如果有值 在根据正则校验
    if(reType[i] == "empty"){
    if($item.val() == ""){
     //就不校验了 
     return true;
     break;
    }else{
     //继续校验
     continue;
    }

    }
    if($("."+tipId).is(":hidden")){
    //如果是隐藏的菜单不校验
    continue;
    }
    //获取返回的正则表达式
    var reg = Validform.matchReg(reType[i]);
    if(!reg.test($item.val())){
    //判断不通过
     $("#"+tipId).html($item.attr("errormsg"));
     return false;
    break;
    }else{
     //判断通过 继续校验
     continue;
    }
   }
   return true;
   }
   break;
   //没有匹配到标签就返回false
   default : return true;
  }

  }



}


Array.prototype.remove = function(s) {
 for (var i = 0; i < this.length; i++) {
  if (s == this[i])
  this.splice(i, 1);
 }
}

function Map() {
 /** 存放键的数组(遍历用到) */
 this.keys = new Array();
 /** 存放数据 */
 this.data = new Object();

 /**
  * 放入一个键值对
  * @param {String} key
  * @param {Object} value
  */
 this.put = function(key, value) {
  if(this.data[key] == null){
  this.keys.push(key);
  }
  this.data[key] = value;
 };

 /**
  * 获取某键对应的值
  * @param {String} key
  * @return {Object} value
  */
 this.get = function(key) {
  return this.data[key];
 };

 /**
  * 删除一个键值对
  * @param {String} key
  */
 this.remove = function(key) {
  this.keys.remove(key);
  this.data[key] = null;
 };

 /**
  * 遍历Map,执行处理函数
  * 
  * @param {Function} 回调函数 function(key,value,index){..}
  */
 this.each = function(fn){
  if(typeof fn != 'function'){
  return;
  }
  var len = this.keys.length;
  for(var i=0;i<len;i++){
  var k = this.keys[i];
  fn(k,this.data[k],i);
  }
 };

 /**
  * 获取键值数组(类似Java的entrySet())
  * @return 键值对象{key,value}的数组
  */
 this.entrys = function() {
  var len = this.keys.length;
  var entrys = new Array(len);
  for (var i = 0; i < len; i++) {
  entrys[i] = {
   key : this.keys[i],
   value : this.data[i]
  };
  }
  return entrys;
 };

 /**
  * 判断Map是否为空
  */
 this.isEmpty = function() {
  return this.keys.length == 0;
 };

 /**
  * 获取键值对数量
  */
 this.size = function(){
  return this.keys.length;
 };

 /**
  * 重写toString 
  */
 this.toString = function(){
  var s = "{";
  for(var i=0;i<this.keys.length;i++,s+=','){
  var k = this.keys[i];
  s += k+"="+this.data[k];
  }
  s+="}";
  return s;
 };
}

这个是一个js插件保存.js引用就可以了,特点灵活可以自定义校验内容原理使用正则表达式,对于隐藏的表单不校验

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<%@ include file="/common/taglibs.jsp"%>
<%@page contentType="text/html;charset=UTF-8"%>
<%@page pageEncoding="UTF-8"%>

<html>
<head>
<title>新建商品</title>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/commodity/common_functions.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/commodity/check_data.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/commodity/commodity_create.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/jquery/jquery.form.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/haha.js"></script>
<script type="text/javascript"
 src="<%=request.getContextPath()%>/static/v0/scripts/haha_upload.js"></script>

<script type="text/javascript">
 j = 1; 
 $(function(){
 updateDiscountPercentage();  
 $("#btn_add2").click(function(){ 
  //var newNode='<div id="fileSelectDiv_'+j+'" class="form-inline"><div class="form-group">';
  //newNode +='<input id="detailImgFiles_'+j+'" name="detailImgFiles" type="file" /></div>';
  //newNode +='<div class="form-group"><input type="button" value="删除" onclick="delDivRow(\'fileSelectDiv_'+j+'\')"/></div><div class="form-group">';
  //newNode +='<span id="detailImgFiles_'+j+'_span" class="sr-text highlight"></span>';
  //newNode +='</div></div>';
  //$("#newUploadTd").append(newNode); 
  var newNode2='<div class="form-inline" id="newImgDiv_'+j+'"><div class="form-group">';
  newNode2+='<textarea dataType="empty|image|*1-500" tipId="detail_span" errormsg="请输入合法的图片链接,并小于500个字符" id="newDetailImgs" name="newDetailImgs" rows="1" cols="100"></textarea>';
  newNode2+='</div><div class="form-group">  ';
  newNode2+='<input type="button" id="btn_delOld2" value="删除" onclick="delDivRow(\'newImgDiv_'+j+'\')"></div></div>';
  $("#showResultTd").append(newNode2); 
  j = j + 1; 
 }); 

 $("input[name='needRobert']").click(function(){
  var need=$('input:radio[name="needRobert"]:checked').val();
  $("tr[name='Show']").toggle(); 
  /* if(need==1){
  $("tr[name='Show']").css('display','block'); 
  }else{
  $("tr[name='Show']").css('display','none'); 
  } */
 });
 });


 </script>
</head>
<body>
 <form:form method="post" action="#" id="hiddenForm" name="hiddenForm">
 <input type="hidden" name="selectedCommodityItemNo"
  id="selectedCommodityItemNo" value="" />
 <input type="hidden" name="imgFileName" id="imgFileName" value="" />
 </form:form>

 <form:form commandName="currentCommodity" name="detailDataForm"
 id="detailDataForm" method="post" enctype="multipart/form-data">

 <div id="errorMessage"
  style="color: #ff2233; font-size: 14px; text-align: center;">
  <c:if test="${not empty errorMessage }">
  <c:out value="${errorMessage }" />
  </c:if>
 </div>
 <input type="hidden" name="searchFunctionEntry"
  id="searchFunctionEntry" value="${searchFunctionEntry}" />
 <div id="content" class=" yui-g member_">
  <legend>新建商品</legend>
  <div class="h10px"></div>
  <fieldset>
  <div class="form-inline">
   <%-- <div class="form-group">
  <input type="button" name="save_btn" class="btn btn-default toTop_o_deg btn_width_1" onclick="createNewAppointment();" value='<fmt:message key="button.save"/>' id="save_btn"/>
  </div>--%>
   <div class="form-group">
   <input type="button" id="return_btn" name="return_btn"
    class="btn btn-default" value="返回列表"
    onclick="returnToSeachFunction('${searchFunctionEntry}');" />
   </div>
  </div>
  </fieldset>

  <div class="h10px"></div>
  <table border="0" width="100%">
  <tbody>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="commodityTitle" class="sr-outer">商品标题:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:textarea path="title" id="title" dataType="s1-50"
     tipId="title_span" errormsg="请输入合法字符的标题,并小于50个字符" name="title"
     rows="1" cols="100" />
    </div>
    <div class="form-group">
     <span id="title_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="keyword" class="sr-outer">关键字:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:textarea dataType="empty|s1-50" tipId="keyword_span"
     errormsg="请输入合法字符的关键字,并小于50个字符" path="keyword" id="keyword"
     name="keyword" rows="1" cols="100" />
    </div>
    <div class="form-group">
     <span id="keyword_span" class="sr-text highlight"></span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="commodityType" class="sr-outer">商品分类:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:radiobutton path="commodityType" id="commodityType"
     name="commodityType" value="0" />
     虚拟商品   
     <form:radiobutton path="commodityType" id="commodityType"
     name="commodityType" value="1" checked="true" />
     实体商品

    </div>
    <div class="form-group">
     <span id="commodityType_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="currencyType" class="sr-outer">货币单位:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <!-- <form:radiobutton path="currencyType" id="currencyType" name="currencyType" value="0"/>福豆    -->
     <form:radiobutton path="currencyType" id="currencyType"
     name="currencyType" value="1" checked="true" />
     福饼

    </div>
    <div class="form-group">
     <span id="commodityType_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>


   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="pictureLink" class="sr-outer">图片链接:<span
     id="preview_myCustImage_span"></span></label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <input type="file" id="myCustImage" name="myCustImage"
     size="45" />
    </div>
    <div class="form-group">
     <input type="button" value="上传图片"
     onclick="ajaxFileUpload('myCustImage','pictureLink')" />
    </div>
    <div class="form-group">
       <span id="myCustImage_span"
     class="sr-text highlight"></span>
    </div>
    </div>
    <div class="form-inline">
    <div class="form-group">
     <form:textarea dataType="image|*1-500" tipId="pictureLink_span"
     errormsg="请输入合法图片链接,并小于500个字符" path="pictureLink"
     id="pictureLink" name="pictureLink" rows="2" cols="100" />
    </div>
    <div class="form-group">
     <span id="pictureLink_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="totalQuantity" class="sr-outer">总人次:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:input dataType="integer" tipId="totalQuantity_span"
     errormsg="总人次必须为正整数" path="totalQuantity" id="totalQuantity"
     name="totalQuantity" class="form-control" type="text"
     maxlength="6" size="6" />
    </div>
    <div class="form-group">
     <span id="totalQuantity_span" class="sr-text highlight">*</span>
    </div>
    </div>

   </td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="unitPrice" class="sr-outer">最低购买注数:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:radiobutton path="unitPrice" id="unitPrice"
     name="unitPrice" value="1" checked="true" />
     一元   
     <form:radiobutton path="unitPrice" id="unitPrice"
     name="unitPrice" value="10" />
     十元
    </div>
    <div class="form-group">
     <span id="unitPrice_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>
   <!-- 细节图 -->
   <tr>
   <td width="20%" rowspan="2">细节图: <!-- 
   <div class="form-inline">
   <div class="form-group">
    <label for="detailImgs" class="sr-outer">细节图:  <input type="button" value="全部上传" onclick="uploadDetailImgs();" /><span id="preview_detailImgs_span"></span></label>
   </div>
   </div>
   -->
   </td>
   <td width="80%" id="newUploadTd">
    <div class="form-inline">
    <div class="form-group">
     <input type="file" onchange="fileUpload_onselect(this)"
     style="display: none;" id="detailImgFiles"
     name="detailImgFiles" /> <input type="button" value="选择图片"
     onclick="document.getElementById('detailImgFiles').click();" />
    </div>
    <div class="form-group" style="margin-left: 20px">
     <input type="button" id="btn_add2" value="增加一行" />
    </div>
    <div class="form-group">
     <span id="detailImgFiles_0_span" class="sr-text highlight"></span>
    </div>
    </div>
   </td>
   </tr>
   <tr>
   <td width="80%" id="showResultTd"><c:forEach var="tmpEntity"
    items="${currentBanner.detailImages}" varStatus="status">
    <div class="form-inline" id="oldImgDiv_${tmpEntity.index}">
     <div class="form-group">
     <textarea id="oldDetailImgs" name="oldDetailImgs" rows="1"
      cols="100">${tmpEntity.url}</textarea>
     <div class="form-group">
      <input type="button" id="btn_delOld2" value="删除"
      onclick="delDivRow('oldImgDiv_${tmpEntity.index}')">
     </div>
     </div>
    </div>
    </c:forEach>
    <div class="form-inline" id="newImgDiv_0">
    <div class="form-group">
     <textarea id="newDetailImgs" dataType="empty|image|*1-500"
     tipId="detail_span" errormsg="请输入合法的图片链接,并小于500个字符"
     name="newDetailImgs" rows="1" cols="100"></textarea>
    </div>
    </div></td>
   </tr>

   <tr>
   <td> </td>
   <td><span id="detail_span" class="sr-text highlight"></span></td>
   </tr>

   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="tags" class="sr-outer">标签:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <c:forEach var="tmpEntity" items="${allTagList}">
     <div class="form-group">
     <label><input type="checkbox" id="selectedTags"
      name="selectedTags" value="${tmpEntity.tagId}">${tmpEntity.tagName}</label>
     <input type="hidden" name="tagName_${tmpEntity.tagId}"
      id="tagName_${tmpEntity.tagId}" value="${tmpEntity.tagName}" />
     </div>
    </c:forEach>
    <div class="form-group">
     <span id="tags_span" class="sr-text highlight">*</span>
    </div>
    </div>

   </td>
   </tr>
   <tr>
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="tags" class="sr-outer">是否需要机器人:</label>
    </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <div class="form-group">
     <form:radiobutton path="needRobert" id="needRobert"
     name="needRobert" value="1" />
     是   
     <form:radiobutton path="needRobert" id="needRobert"
     name="needRobert" value="0" checked="true" />
     否
    </div>
    <div class="form-group">
     <span id="unitPrice_span" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   <tr style="display: none;" name="Show">
   <td width="20%">
    <div class="form-inline">
    <div class="form-group">
     <label for="tags" class="sr-outer">计划售完时间:</label>
    </div>
    </div>

   </td>
   <td width="80%">
    <div class="form-inline">
    <form:input type="number" path="planSoldTime" dataType="integer" tipId="planSoldTime_"
     errormsg="必须为正整数" class="planSoldTime_" min="0" max="9999" />
    <div class="form-group">
     <span id="planSoldTime_" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>
   <tr style="display: none;" name="Show">
   <td width="20%">
    <div class="form-inline">
     <div class="form-group">
     <label for="tags" class="sr-outer">最大购买次数:</label>
     </div>
    </div>
   </td>
   <td width="80%">
    <div class="form-inline">
    <form:input type="number" dataType="integer" tipId="regularTriggerTotalTimes_"
     errormsg="必须为正整数" class="regularTriggerTotalTimes_" path="regularTriggerTotalTimes" min="1"
     max="10" />
    <div class="form-group">
     <span id="regularTriggerTotalTimes_" class="sr-text highlight">*</span>
    </div>
    </div>
   </td>
   </tr>

   </div>

  </tbody>
  </table>

 </div>

 </form:form>
 <div class="h10px"></div>
 <div class="form-inline">
 <div class="form-group">
  <input type="button" name="save_btn" id="save_btn"
  class="btn btn-default toTop_o_deg btn_width_1"
  onclick="createNewCommodity();" value='提交并预览' />
 </div>
 </div>


</body>
</html>

这个是html的用法不用考虑其他的就是html代码

function validateForm1(){ 
 var flag=HaHaUtil.checkFrom('detailDataForm');
 return flag;
 }

这个是from表单之前的数据校验的函数。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 继承详解(三)
Jul 13 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
Jan 17 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
Apr 11 Javascript
javascript中直接写php代码的方法
Jul 31 Javascript
jQuery实现表单提交时判断的方法
Dec 13 Javascript
轻量级的原生js日历插件calendar.js使用指南
Apr 28 Javascript
node学习记录之搭建web服务器教程
Feb 16 Javascript
详解Vue This$Store总结
Dec 17 Javascript
js序列化和反序列化的使用讲解
Jan 19 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
Mar 29 Javascript
小程序关于请求同步的总结
May 05 Javascript
javascript的this关键字详解
May 20 Javascript
jquery 动态增加删除行的简单实例(推荐)
Oct 12 #Javascript
老生常谈javascript的类型转换
Oct 12 #Javascript
vue制作加载更多功能的正确打开方式
Oct 12 #Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 #Javascript
深入理解Node.js的HTTP模块
Oct 12 #Javascript
纯js实现手风琴效果代码
Apr 17 #Javascript
JavaScript 继承详解(六)
Oct 11 #Javascript
You might like
用PHP实现多级树型菜单
2006/10/09 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
php生成shtml类用法实例
2014/12/09 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
JQuery 获得绝对,相对位置的坐标方法
2010/02/09 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
javaScript事件机制兼容【详细整理】
2016/07/23 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
JS实现点击掉落特效
2021/01/29 Javascript
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
对python中的logger模块全面讲解
2018/04/28 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
Python变量访问权限控制详解
2019/06/29 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
售后主管岗位职责
2013/12/08 职场文书
大一自我鉴定范文
2013/12/27 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
甜点店创业计划书
2014/01/27 职场文书
总经理任命书范本
2014/06/05 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
新员工辞职信范文
2015/05/12 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技