javascript处理表单示例(javascript提交表单)


Posted in Javascript onApril 28, 2014

处理各种表单, 以及链接,按钮的通用组件

/**
 * Generic Form processing js
 * @author Anthony.chen
 */
/**
 * Push button action [btn_action]data into form
 * If there is prescript , run the pre script
 */
"use strict";
//All ajax request are synchronized by default
var ajaxSynchronized = true;
//All ajax request will be unblock by default
var ajaxAutoUnblock = true;
var ajax_action_button = function (e){
 var btn = $(this);
 //Add prescript
 var pre_script;
 if(pre_script = btn.attr("pre_script")){
  var ret = eval(pre_script);
  if(ret==false){
   return false;
  }
 }
 var btn_action = btn.attr('value');
 if(btn_action){
  $(this).closest('form').data('btn_action',
   { name:'btn_action',value:btn_action }
   );
 }
};
/**
 * Update the extra form data in FormElement with Form element, Key and Value
 */
var ajax_update_post_data = function(formEle, k, v){
 var form = $(formEle);
 var post_data = form.data('post_data');
 if( post_data == undefined ){
  post_data = {};
 }
 if( v == undefined ){
  delete post_data[k];
 }else{
  post_data[k] = v;
 }
 form.data('post_data',post_data);
 return true;
};
/**
 * Bool Checkbox is special checkbox which needs to keep UNCHECK value 
 * And post with ajax form ,the form is in the parent
 */
var bool_checkbox = function(){
 var ipt = $(this);
 var formEle = ipt.closest("form");
 var _check = ipt.prop("checked");
 if(_check){
  ajax_update_post_data(formEle,ipt.attr('name'));
 }else{
  ajax_update_post_data(formEle,ipt.attr('name'),'f');
 }
};
/**
 * Init the spin number
 */
var spin_number = function(){
 var spin = $(this);
 var config = { 
  lock:true,
    imageBasePath: '{webpath}/css/images/spin/',
    btnCss: null,
    txtCss: null,
    btnClass:'spin_btn',
 };
 var interval = spin.attr('interval');
 if(interval){
  config.interval = interval;
 }else{
  config.interval = 1;
 }
 var min = spin.attr('min');
 if( min ){
  config.min = min;
 }
 var max = spin.attr('max');
 if( max ){
  config.max = max;
 }
 spin.spin(config);
 return true;
};
/**
 * Init the date input
 */
var date_input = function(){
 var ipt = $(this);
 var config = {
  offset:[4,0],
  selectors:true,
  lang: '{lang}',
  firstDay : 1,
  format: 'yyyy-mm-dd',
 };
 var min = ipt.attr('min');
 if( min ){
  config.min = min;
 }
 var min = ipt.attr('min');
 if( min ){
  config.min = min;
 }
 ipt.dateinput(config);
 return true;
};

/**
 * Init the timePicker
 */
var time_picker = function(){
 var ipt = $(this);
 var config = { };
 var step = ipt.attr("step");
 if( step ){
  config.step = step;
 }
 ipt.timePicker( config );
 return true;
};
/**
 * Generic Ajax Form post function
 * If btn_action is set, then add data into form
 * if returi is set, redirect to returi
 * if reload is set, reload 
 * else Show block message
 *
 * the form will be validated.
 */
var ajax_form_post = function(e){
 var form = $(this);
 var pre_script;
 if(pre_script = form.attr("pre_script")){
  var ret = eval(pre_script);
  if(ret==false){
   return false;
  }
 }
 var errHint = form.find(".formError").first();
 if(errHint.size() == 0){
  errHint = $("#pageError");
 }
 errHint.text('').hide();
 //Cleanup the pageError
 if(!e.isDefaultPrevented()){
  //Hide all .formError
  $.blockUI({ message:"{__('L_PROCESSING')}" });
  var formArray = form.serializeArray();
  var btn_action_data;
  var btn_action;
  if(btn_action_data = form.data('btn_action')){
   formArray.push(btn_action_data);
   form.removeData('btn_action');
   btn_action = btn_action_data.value;
  }else{
   btn_action = '';
  }
  console.log('btn action:'+btn_action);
  //Add extra Data
  var post_data;
  if(post_data = form.data('post_data')){
   for (var k in post_data ){
    //if post_data[k] is array,need more to do
    formArray.push( { name:k ,value: post_data[k] } );
   }
   form.removeData('post_data');
  }
  $.post(form.attr('action'), formArray,function(json){
    if($(window).data('blockUI.isBlocked') == 1){
     $.unblockUI();
    }
    if(json.code === true){
     var returi = "";
     var retData = "{__('L_PROCESSED')}!";
     if(json.data){
      retData = json.data; 
     }
     //TODO Add suppport to allow save and stay
     if(btn_action =='reqonly'){
      if(returi = form.attr('returi')){
       $(window).data('blockUI.returi',returi);
       ajaxAutoUnblock = false;
      }
      $.blockUI({ message:retData, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });
      $(".blockUI").addClass("blockwarn");
     } //if there is returi set, then return to uri
     else if(returi = form.attr('returi')){
      window.location = returi;
     //Else if reload is set, then will be reload
     }else if(form.attr('reload')!=undefined){
      window.location.reload();
     }else{
      $.blockUI({ message:retData });
      $.unblockUI();
     }
    }
    else{
     if(typeof (json.data.errmsg) == 'string'){
      errHint.html(json.data).show();
      //$.blockUI({ message:json.data, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });
      //$(".blockUI").addClass("blockwarn");
     }else{
      errHint.html("{Html::text(__('E_FORM'))}").show();
      for(var p in json.data){
       var msg = json.data[p];
       //Process hidden value,None hidden input should has refid refered to hidden value
       //Showing the Server message to ref 
       var ele = form.find("[type=hidden][name="+p+"]");
       if(ele.length){
        delete json.data.p;
        refid = ele.attr("id");
        refname = form.find("[hidden-id="+refid+"]").attr("name");
        json.data[refname]=+msg;
       }
       //Muti checkbox 
       var ele = form.find("[type=checkbox][name='"+p+"[]']");
       if(ele.length){
        delete json.data.p;
        refname = p+'[]';
        json.data[refname]=+msg;
       }
       //@END
      }
     }
     /*
      * Checking the hidden values 
      */
     form.data("validator").invalidate(json.data);
    } },'json');
    e.preventDefault();
 }else{
  errHint.html("{Html::text(__('E_FORM'))}").show();
 }
};
/***
 * Reset the input
 */
var ajax_post_form_hidden = function(){ 
  var form  = $(this);
  form.find("[hidden-id]").each(function(){
   //Clear the message of Reference 
   var input = $(this);
   var refid = input.attr("hidden-id");
   var field = $("#" + refid + ""); 
   //Setup the clear of Errmsg
   //Monitor the change event on ID element, remove error message 
   //of Real input
   field.change(function(){ 
    //Hidden input
    var hinput  = $(this);
    //real input
    var rinput = $("[hidden-id="+hinput.attr("id")+"]").first();
    form.data('validator').reset(rinput)
    });
   });
  };
var validate_hidden_id =  function(input) {
 var refid = input.attr("hidden-id");
 var field = $("#" + refid + ""); 
 var msg = field.attr('msg');
 if( !msg ){
  msg = "{__('E_NOT_EMPTY')}";
 }
 return field.val() ? true : msg; 
};
var data_equals_validate =  function(input) {
 var field;
 var name = input.attr("data-equals");
 field = this.getInputs().filter("[name=" + name + "]");
 return input.val() == field.val() ? true : [name];
};
/**
 * Ajax request through link
 * If confirm is set, confirm before send request
 * Support returi and reload
 * Else show block message
 */
var ajax_link_req = function(){
 var l = $(this);
 var hint = l.attr('hint');
 if(hint){
  var errHint = $(l.attr('hint'));
  errHint.text('').hide();
 }
 //If the confirm message is set, then should be confirmed from client
 if(l.attr('confirm')){
  if(!confirm(l.attr('confirm'))){
   return false;
  }
 }
 $.blockUI({ message:"{__('L_PROCESSING')}" });
 var pre_script;
 if(pre_script = l.attr("pre_script")){
  var ret = eval(pre_script);
  if(ret==false){
   return false;
  }
 }
 var block = l.attr('block');
 if(block != undefined){
  ajaxAutoUnblock = false ;
 }
 $.get(l.attr('href'),function(json){
   if(json.code == true){
    var retData = "{__('L_PROCESSED')}!";
    var returi;
    //If success to execute funtion for each
    var successFunc = l.attr('success');
    if(successFunc){
     l.each(window[successFunc]);
    }
    if(json.data){
     retData = json.data; 
    }
    //IF Require warning before
    if( l.attr('value') == 'reqonly'){
     alert(retData);
    }else if(returi = l.attr('returi')){
     window.location = returi;
    }
    else if(l.attr('reload')!=undefined){
     window.location.reload();
    }
    else{
     $.blockUI({ message:retData, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });
     $(".blockUI").addClass("blockwarn");
    }
   }else{
    //$.unblockUI();
    //Only could support Text errmsg
    if(hint){
     errHint.text(json.data).show();
    }else{
     alert(json.data);
    }
   }},'json');
 return false;
};
/**
 * Supporting the button base navigation
 * Only jump to new href
 */
var btn_nav = function(){
 var input = $(this);
 var href = input.attr("href");
 if(href){
  window.location = href;
 }else{
  alert("Href not set");
 }
 return false;
};
/**
 * Support button base Ajax get method request
 * support returi and reload
 */
var btn_req = function(){
 var input = $(this);
 var href = input.attr("href");
 var hint = input.attr('hint');
 if(hint){
  var errHint = $(hint).first();
  if(errHint.size() == 0){
   errHint = $("#pageError");
  }
  errHint.text('').hide();
 }
 var block = input.attr('block');
 if(block != undefined){
  ajaxAutoUnblock = false 
 }
 $.get(href,function(json){
   if(json.code == true){
   var returi;
   if(returi = input.attr('returi')){
    window.location = returi;
   }
   else if(input.attr("reload")!=undefined){
    window.location.reload();
   }else{
     var retData = "{__('L_PROCESSED')}!";
     if(json.data){
      retData = json.data; 
     }
     $.blockUI({ message:retData,css:{ cursor:'pointer' },overlayCSS:{ cursor:'pointer' } });
    }
   }else{
    if(hint){
     $.unblockUI();
     errHint.html(json.data.errmsg).show();
    }else{
     $.blockUI({ message:json.data.errmsg, css:{ cursor:'pointer',padding:'4px',border:'3px solid #CC0000',}, overlayCSS:{ cursor:'pointer' } });
     $(".blockUI").addClass("blockwarn");
    }
   }
   },'json');
 return false;
};
 
/**
 * Generic Ajax Checkbox
 * The default action is prevented and submit real request through URL
 */
var ajax_checkbox = function(){
 event.preventDefault();
 var action = $(this);
 var url = action.attr('url');
 var _check = action.prop("checked");
 console.log(_check);
 var op ; 
 if(_check){
  op = "1";
 }else{
  op = "0";
 }
 $.get(url + op ,function(json){
  if(json.code == true){
    if(_check){
     action.prop("checked",true);
    }else{
     action.prop("checked",false);
    }
    return true;
   }else{
    return false;
   }
 },'json');
};

/**
 * Crete Root picklist 
 */
var picklistinit = function(){
 var _select = $(this);
 var _hidden_id = _select.attr('hidden-id');
 var _un = _select.attr('un');
 var _lovchildren = _select.data('lovtree').c;
 var _rowvalue = _select.data('rowvalue');
 $("<OPTION>").append("{__('L_SELECT')}").appendTo(_select);
 for(var _kid in _lovchildren){
  var _lov = _lovchildren[_kid]['lov'];
  $("<OPTION>").val(_lov.lov_id).append(_lov.v).attr('k',_lov.id).attr('is_leaf',_lov.is_leaf).appendTo(_select);
 }
 _select.change(picklistchange);
 //Select the list
 if(_rowvalue){
  _select.find("[value="+_rowvalue[0]+"]").prop("selected",true);
  _select.change();
 }
 return true;
};
/**
 * Select pick list
 */
var picklistchange = function (){
 var _select = $(this);
 var _hidden_id = _select.attr('hidden-id');
 var _un = _select.attr('un');
 //Remove all the subsequent 
 var _lovtree = _select.data('lovtree');
 var _rowvalue = _select.data('rowvalue');
 _select.nextAll().remove();
 //This is value of Current Select
 var _selected = _select.find(':selected');
 if(_selected.attr('is_leaf')=="{DB::T}"){
  $("#"+_hidden_id).val(_select.val());
  _select.after("<img src='/s.gif' class='sprite_global successimg'/>");
 }else{
  var _val = _select.val();
  var _k = _selected.attr('k');
  //Getting Children list
  if(_lovtree.c[_k].c == undefined){
   return false;
  }
  var _c_lovtree =  _lovtree.c[_k];
  var _c_select = $('<SELECT>').data('lovtree',_c_lovtree).
   data('rowvalue',_rowvalue).
   attr('hidden-id',_hidden_id).attr('un',_un).
   attr('name',_un+'_'+_k);
  $("<OPTION>").append("{__('L_SELECT')}").appendTo(_c_select);
  //Building the option list
  for(var _kid in _c_lovtree.c){
   var _lov = _c_lovtree.c[_kid]['lov'];
   $("<OPTION>").val(_lov.lov_id).append(_lov.v).attr('k',_lov.id).attr('is_leaf',_lov.is_leaf).appendTo(_c_select);
   //Insert after
   _select.after(_c_select);
   //Onchange
  }
  _c_select.change(picklistchange);
  if(_rowvalue){
   _c_select.find("[value="+_rowvalue[_k]+"]").prop("selected",true);
   _c_select.change();
  }
 }
};
 
var lookup_new = function(){
 var lookup = $(this);
 var pre_script;
 if(pre_script = lookup.attr("pre_script")){
  var ret = eval(pre_script);
  if(ret==false){
   return false;
  }
 }
 var url = lookup.attr("url");
 if(!url){
  alert('url not set');
  return false;
 }
 var height = lookup.attr('h');
 if(!height){
  height = 600;
 }
 var width = lookup.attr('w');
 if(!width){
  width = 800;
 }
 window.open(url,"pselect","scrollbars=yes,menubar=no,height="+height+",width="+width+",resizable=yes,toolbar=no,location=no,status=no");
 return false;
};
/**
 * Lookup  new value for hidden value
 */
var parent_lookup = function(){
 var lookup = $(this);
 var pid = opener.$("#" + lookup.attr('pid'));
 if(!pid.length){
  alert(lookup.attr('pid')+ " not found");
  return false;
 }
 var pname = opener.$( "#" + lookup.attr('pname'));
 if(!pname.length){
  alert(lookup.attr('pname')+ " not found");
  return false;
 }
 var aft_script;
 //Run current after script
 if(aft_script = lookup.attr('aft_script')){
  window.eval(aft_script);
 }
 pid.val($(this).attr("refid")); 
 //Only operation from opener could trigger change event
 pid.change();
 pname.val($(this).attr("refvalue")); 
 pname.change();
 //Parent after_script
 if(aft_script = pname.attr('aft_script')){
  opener.window.eval(aft_script);
 }
 if(aft_script = pid.attr('aft_script')){
  opener.window.eval(aft_script);
 }
 window.close();
};
/**
 * Default upload complete
 */
//var uploadComplete = function(event, id, fileName, responseJSON) { 
var uploadComplete = function(e, data) { 
 //To be replaced by jquery uploader
 var _fileUpload = $(this);
 //console.log(_fileUpload);
 //console.log(data.result);
 if(_fileUpload.attr('reload')!=undefined){
  window.location.reload();
 }
};
/**
 * File upload function ,the following attribute to control action of upload
 * 'endpoint' as upload url
 * 'sid' as session id
 * 'complete' optional to configure the custom upload complete function
 */
var genericUpload = function(dom){
 var endpointurl = $(this).attr('endpoint');
 var sid = $(this).attr("sid");
 var completeFunc = 'uploadComplete';
 //Setup custome complete function
 var cusComplete = $(this).attr('complete');
 if(cusComplete){
  completeFunc = cusComplete;
 }
 $(this).fileupload({
  url: endpointurl,
  autoUpload:true,
  dataType:'json',
  formData: [{ 'sessionid': sid }],
  paramName: 'Filedata',
 }).bind('fileuploaddone',window[completeFunc]);
};
/**
 * Matched errors with input 
 * Only matched errors could be identified here
 */
var advance_validate = function(errors, event) {
 var conf = this.getConf();
 // loop errors
 $.each(errors, function(index, error) {
   // add error class into input Dom element
   var input = error.input;     
   input.addClass(conf.errorClass);
   // get handle to the error container
   var msg = input.data("msg.el"); 
   // create Error data if not present, and add error class for input
   // "msg.el" data is linked to error message Dom Element
   if (!msg) { 
   //msg = $(conf.message).addClass(conf.messageClass).insertAfter(input);
   msg = $(conf.message).addClass(conf.messageClass).appendTo(input.parent());
   input.data("msg.el", msg);
   }  
   // clear the container 
   msg.css({visibility: 'hidden'}).find("span").remove();
   // populate messages
   $.each(error.messages, function(i, m) { 
     $("<span/>").html(m).appendTo(msg);   
     });
   // make sure the width is not full body width so it can be positioned correctly
   if (msg.outerWidth() == msg.parent().width()) {
    msg.add(msg.find("span"));  
   } 
   //insert into correct position (relative to the field)
   msg.css({ visibility: 'visible'}) .fadeIn(conf.speed);     
   msg.parent().addClass("colError");
 });
};
var advance_inputs = function(inputs) {
 var conf = this.getConf();    
 inputs.removeClass(conf.errorClass).each(function() {
   var msg = $(this).data("msg.el");
   if (msg) {
   msg.hide();
   msg.parent().removeClass("colError");
   }
   });
 if($(".colError").size() == 0){ 
  var form = $(this);
  var errHint = form.find(".formError").first();
  if(errHint.size() == 0){
   errHint = $("#pageError");
   errHint.text('').hide();
  }
 }
};
/**
 * When refname is contained to be selected
 */
var checkall = function() { 
 var check = $(this);
 var refname = check.attr('refname');
 if(refname){
  if(check.prop("checked")){
   $("input[name*='"+refname+"']").prop("checked",true);
  }else{
   $("input[name*='"+refname+"']").prop("checked",false);
  }
 }
 var refclass = check.attr('refclass');
 if(refclass){
  if(check.prop("checked")){
   $("input."+refclass).prop("checked",true);
  }else{
   $("input."+refclass).prop("checked",false);
  }
 }
};
/**
 * Setup readonly checkbox 
 */
var readonlyCheck = function(e){
 e.preventDefault(); 
 return false;
};
/**
 * Select List disable
 */
var readonlySelect = function(){
 $(this).prop("disabled", true); 
};

$(document).ready(function() {
  $(document).ajaxStart(function(){
   //Clean up the Ajax request Page Level Error
   $("#pageError").text('').hide();
   //Clean up teh Form Error
   $(".formError").text('').hide();
   //Blocking all ajax processing
   if(ajaxSynchronized){
    $.blockUI({ message:"{__('L_PROCESSING')}" });
    }
   });
  $(document).ajaxStop(function(){
   if(ajaxSynchronized){
    if($(window).data('blockUI.isBlocked') == 1){
     if(ajaxAutoUnblock){
      $.unblockUI();
     }else{
        ajaxAutoUnblock = true;
     }
    }
   }else{//Change back to default Synchronized mode from Async
    ajaxAutoUnblock = true;
    ajaxSynchronized =  true;
   }
   });
  $(document).ajaxError(function(event, request, settings){
   alert('Ajax Request Error! URL='+settings.url);
   if(ajaxSynchronized){
    if($(window).data('blockUI.isBlocked') == 1){
     if(ajaxAutoUnblock){
      $.unblockUI();
     }else{
        ajaxAutoUnblock = true;
     }
    }
   }else{
    ajaxAutoUnblock = true;
    ajaxSynchronized =  true;
   }
   });
  //Force unblockUI
  $(document).click(function(){
    if($(window).data('blockUI.isBlocked') == 1){
     $.unblockUI();
     var returi = $(window).data('blockUI.returi');
     if(returi){
      window.location = returi;
     }
    }});
  $.tools.validator.addEffect("advanced", advance_validate,advance_inputs);
  $.tools.validator.fn("[data-equals]", { "{lang}":"{__('E_NOTEQUAL')}" }, data_equals_validate );
  $.tools.validator.fn("[hidden-id]",validate_hidden_id);
  $(".ajax_form_post").validator({ lang:'{lang}',effect:'advanced' }) .submit( ajax_form_post );
  $(".ajax_form_post").each(ajax_post_form_hidden);
  $(".spin_number").each(spin_number);
  $(".date_input").each(date_input);
  $(".time_picker").each(time_picker);
  $('.ajax_link_req').click(ajax_link_req);
  //Client validation for the hidden ID 
  $(".require_validate").validator({ lang:'{lang}',effect:'advanced' });
  $(".btn_nav").click( btn_nav );
  $(".btn_req").click( btn_req );
  $("button.btn_action").click(ajax_action_button);
  $(".lookup_new").click(lookup_new);
  $(".parent_lookup").click(parent_lookup);
  $(".ajax_checkbox").click(ajax_checkbox);
  $(".bool_checkbox").click(bool_checkbox);
  $(".checkall").click(checkall);
  $("img[rel]").overlay();
     $("input[tip]").tooltip({ position:"center right"});
  //At last we will do localize
  $.tools.validator.localize("{lang}", {
   '*'     : "{__('E_ALL')}",
   ':email'    : "{__('E_EMAIL')}",
   ':number'   : "{__('E_DECIMAL')}",
   ':url'      : "{__('E_URL')}",
   '[max]'     : "{__('E_MAX_LENGTH')}",
   '[min]'     : "{__('E_MIN_LENGTH')}",
   '[required]'    : "{__('E_NOT_EMPTY')}",
   });
});
Javascript 相关文章推荐
URL地址中的#符号使用说明
Feb 12 Javascript
js正则表达式的使用详解
Jul 09 Javascript
如何调试异步加载页面里包含的js文件
Oct 30 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
Dec 16 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
React学习之事件绑定的几种方法对比
Sep 24 Javascript
vue组件传递对象中实现单向绑定的示例
Feb 28 Javascript
vue组件通信传值操作示例
Jan 08 Javascript
原生JS实现留言板
Mar 26 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
Oct 18 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
Nov 07 Javascript
js对象内部访问this修饰的成员函数示例
Apr 27 #Javascript
node.js中的socket.io入门实例
Apr 26 #Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
Apr 25 #Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 #Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 #Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
Apr 25 #Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
Apr 25 #Javascript
You might like
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
js正确获取元素样式详解
2009/08/07 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
node.js中的console用法总结
2014/12/15 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
2015/10/27 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
解决element ui select下拉框不回显数据问题的解决
2019/02/20 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
JavaScript碰撞检测原理及其实现代码
2020/03/12 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python群发邮件实例代码
2014/01/03 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
python并发和异步编程实例
2018/11/15 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
Python第三方包PrettyTable安装及用法解析
2020/07/08 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
2014/09/11 HTML / CSS
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
会计实习自我鉴定
2013/12/04 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书