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 相关文章推荐
Javascript中的数学函数集合
May 08 Javascript
JavaScript 捕获窗口关闭事件
Jul 26 Javascript
jquery isEmptyObject判断是否为空对象的函数
Feb 14 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
Mar 29 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
Jun 24 Javascript
js判断是否为空和typeof的用法(详解)
Oct 07 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
Sep 21 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
Mar 30 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
Apr 23 Javascript
原生JavaScript实现滑动拖动验证的示例代码
Dec 06 Javascript
vant picker+popup 自定义三级联动案例
Nov 04 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
无数据库的详细域名查询程序PHP版(4)
2006/10/09 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
使用socket.io制做简易WEB聊天室
2018/01/02 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
监控微信小程序中的慢HTTP请求过程详解
2019/07/05 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
使用TensorFlow实现SVM
2018/09/06 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Ted Baker美国官网:英国时尚品牌
2018/10/29 全球购物
网络安全类面试题
2015/08/01 面试题
服装店营销方案
2014/03/10 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
高中体育课教学反思
2016/02/16 职场文书