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 相关文章推荐
js验证表单大全
Nov 25 Javascript
javascript 处理HTML元素必须避免使用的一种方法
Jul 30 Javascript
写js时遇到的一些小问题
Dec 06 Javascript
javascript 二进制运算技巧解析
Nov 27 Javascript
js实现弹窗插件功能实例代码分享
Dec 12 Javascript
JS批量操作CSS属性详细解析
Dec 16 Javascript
浅析JQuery UI Dialog的样式设置问题
Dec 18 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
JavaScript中使用Object.create()创建对象介绍
Dec 30 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
json字符串对象转换代码实例
Sep 28 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操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
2015/05/13 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
8 个有用的JS技巧(推荐)
2019/07/03 Javascript
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
跟老齐学Python之Python安装
2014/09/12 Python
python使用psutil模块获取系统状态
2016/08/27 Python
python生成二维码的实例详解
2017/10/29 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
pygame实现飞机大战
2020/03/11 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
奥地利网上书店:Weltbild
2017/07/14 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
农救科工作职责
2013/11/27 职场文书
管理站站长岗位职责
2013/11/27 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
离婚协议书的范本
2015/01/27 职场文书
2016国庆促销广告语
2016/01/28 职场文书
实习报告怎么写
2019/06/20 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Vue和Flask通信的实现
2021/05/19 Vue.js
Vue Element plus使用方法梳理
2022/12/24 Vue.js