JS常用方法总结,及jquery异步调用后台方法实例

查看字符串是否日期格式的函数,原创,很简单,而且大部分日期格式都支持,比如年月日,月日年等格式均可:

function isDate(val) {
return new Date(val) != "Invalid Date";
}

//获取当前时间,格式YYYY-MM-DD
function getNowFormatDate() {
var date = new Date();
var seperator1 = "-";
var year = date.getFullYear();
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var currentdate = year + seperator1 + month + seperator1 + strDate;
return currentdate;
}

//获取当前时间,格式YYYY-MM-DD HH:MM:SS

function getNowFormatDateTime() {
var date = new Date();
var seperator1 = "-";
var seperator2 = ":";
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
+ " " + date.getHours() + seperator2 + date.getMinutes()
+ seperator2 + date.getSeconds();
return currentdate;
}

确定是日期格式后,比较两个字符串日期也很简单,直接转为日期比较即可,如下:

if(Date.parse(new Date(expireOrSignDate)) <= Date.parse(new Date()))

{...}

//前台接收get参数值

function getQueryString(name) {
            var queryStrings = window.location.search.split('&');
            for (var i = 0; i < queryStrings.length; i++) {
                if (queryStrings[i].indexOf(name + "=") != -1)
                    return queryStrings[i].substr(queryStrings[i].indexOf(name + "=") + name.length + 1, queryStrings[i].length);
            }
            return "";
        } 

//前台接收get参数值,这种实现也可以

function getQueryString(name) {
 var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
 var r = window.location.search.substr(1).match(reg);
 if (r != null) return unescape(r[2]); return null;
}

把对象转换成string,此方法名称只能为parseString,要换名称就全部替换

parseString = function (obj) {
 switch (typeof (obj)) {
  case 'string':
   //return '"' + obj.replace(/(["file://])/g, '\$1') + '"';
   return '"' + obj + '"';
  case 'array':
   return '[' + obj.map(parseString).join(',') + ']';
  case 'object':
   if (obj instanceof Array) {
    var strArr = [];
    var len = obj.length;
    for (var i = 0; i < len; i++) {
     strArr.push(parseString(obj[i]));
    }
    return '[' + strArr.join(',') + ']';
   } else if (obj == null) {
    return 'null';

   } else {
    var string = [];
    for (var property in obj) string.push(parseString(property) + ':' + parseString(obj[property]));
    return '{' + string.join(',') + '}';
   }
  case 'number':
   return obj;
  default:
   return obj;
 }
}

//利用option的text的值来默认选中某一项:

注意第一种方法有时不行,推荐第二种

1,$("#drpBrand").find("option[text='" + $("#hdBrand").val() + "']").attr("selected", true).change();
2,$("#drpBrand").find("option:contains('" + $("#hdBrand").val() + "')").attr("selected", true).change();

js中,按照值删除数组中的某个元素

Array.prototype.indexOf = function(val) {
            for (var i = 0; i < this.length; i++) {
                if (this[i] == val) return i;
            }
            return -1;
        };
        Array.prototype.remove = function(val) {
            var index = this.indexOf(val);
            if (index > -1) {
                this.splice(index, 1);
            }
        };

如:
        var array = [1, 2, 3, 4, 5];
        array.remove(3);

/// <summary>
  /// 复制对象
  /// </summary>
  /// <param name="target">目标对象</param>
  /// <param name="source">原始对象</param>
        private void TryUpdateModel(Object target, Object source)
        {
            var tprops = target.GetType().GetProperties();
            foreach (var prop in source.GetType().GetProperties())
            {
                var tprop = tprops.FirstOrDefault(p => p.Name.Equals(prop.Name));
                if (tprop == null) continue;
                tprop.SetValue(target, prop.GetValue(source, null), null);
            }
        }

/// <summary>
  /// 注册前台脚本
  /// </summary>
  /// <param name="scriptName">前台脚本变量名</param>
  /// <param name="scriptValue">脚本Json对象</param>
  protected void RegisterScript(string scriptName, object scriptValue)
  {
   var json = string.Format("{0}={1};", scriptName, JsonHelper.JsonSerialize(scriptValue));
   ClientScript.RegisterClientScriptBlock(typeof(string), scriptName + "json", json, true);
  }

//将[{name:'name1',value:'value1'}]转换为{'name1':'value1'}
function fixData(d) {
    var ndata = {};
    for (var i in d) {
        ndata[d[i].name] = d[i].value;
    }
    return ndata;

//限制某个文本框只能输入数字,无法输入字母

$('#dvMain').find(".memPhoneSearch input")
    .keypress(function (e) {
        var chars = "0123456789";
        var chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode);
        return e.ctrlKey || e.metaKey || (chr < ' ' || chars.indexOf(chr) > -1);
    })

打开的pop窗口随着鼠标点击的dom元素而定位展示的js代码:

e是click事件,o是pop窗口的宽度或高度,

eventX = function (e, o) {
  e = e || window.event;
  o = o || 0;
  x = e.pageX || e.clientX + document.body.scroolLeft;
  return x + o > screen.availWidth ? screen.availWidth - o : x - o / 2 < 0 ? 0 : x - o / 2;
 }

eventY = function (e, o) {
  e = e || window.event;
  o = o || 0;
  alert('clientY = ' + e.clientY);
  y = e.pageY || e.clientY + document.body.scrollTop;
  return y + o > screen.availHeight ? screen.availHeight - o : y - o / 2 < 0 ? 0 : y - o / 2;
 }

一个button不在某个form内,点击该button时提交某个form的代码:

//e.preventDefault()可以不要

$("dvMain").find(".btnMemSearch").click(function (e) { e.preventDefault(), $(".memPhoneSearch form").submit() });

异步ajax方法封装(post传值,参数和返回值都是json形式):

注意一点:前端利用此方法异步调用后台WebService中的方法时,后台返回前台的Json字符串是有长度限制的,如果后台返回的Json字符串过长系统是会报错的,此时应在后台的web.config中的根节点下(即configuration节点内部)添加以下配置节点即可解决,当然具体返回的字符串的长度可以根据实际情况进行配置:

<system.web.extensions> 
    <scripting> 
      <webServices> 
        <jsonSerialization maxJsonLength="1024000000" /> 
      </webServices> 
    </scripting> 
</system.web.extensions>

ajax = function (uri, data, callback) {
 $.ajax({
  type: "post",
  cache: false,
  url: uri,
  data: data,
  dataType: "json",
  contentType: "application/json",
  success: callback,
  error: function (res) { alert(res) }
 });
}

使用此方法调用webservice后台方法 实例(注意 res.d):

前台:

ajax("/Web/WebService/CorseListService.asmx/GetCorseList", parseString({ CourseType: $("#ddlCourseType").val(), ClassID: $(this).val() }),
                    function (res) {
                        var data = eval("(" + res.d + ")");
                        //var data = $.parseJSON(res.d);
                        bindSelect("ddlCourse", data);
                        courseLoaded = true;
                    });

后台方法:

[WebMethod(EnableSession = true)]
    public string GetCorseList(string CourseType, string ClassID) {
        string result = "";
        string where = " DataState=1 and ClassTypeID = " + CourseType;
        if (ClassID != "-1")
        {
            List<ClassInfo> lc = ciMan.GetModelList("ID=" + ClassID);
            if (lc != null && lc.Count > 0)
            {
                where += "  and JobTypeID=" + lc[0].JobTypeId;
            }
        }
        List<NewAddCourse> adc = nacMan.GetModelList(where);
        result = JsonConvert.SerializeObject(adc.Select(o => new { Display = o.CourseName, Value = o.Id }).ToList());
        return result;
    }

传递对象的例子:

前台:

var item = {
                    Id: $("#hfItemID").val(),
                    SchoolId: $("#<%= ddlSchoolName.ClientID %>").val(),
                    ClassId: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlClass.ClientID %>").val(),
                    CourseId: $("#ddlCourse").val(),
                    TeacherId: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlTeacher.ClientID %>").val(),
                    Classroom: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlRoom.ClientID %>").val(),
                    CourseType: $("#ddlCourseType").val(),
                    StartTime: $("#txtStartDate").val(),
                    EndTime: $("#txtEndDate").val(),
                    StartTimeType: ($("#chkAllDay").attr("checked") ? 0 : $("#ddlStartType").val()),
                    EndTimeType: ($("#chkAllDay").attr("checked") ? 0 : $("#ddlEndType").val()),
                    ClassName: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlClass.ClientID %> option:selected").text(),
                    TeacherName: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlTeacher.ClientID %> option:selected").text(),
                    ClassroomName: $("tr.trHide").is(":hidden") ? "-1" : $("#<%= ddlRoom.ClientID %> option:selected").text(),
                    CourseName: $("#ddlCourse option:selected").text(),
                    Year: $("#hfYear").val()
                };

                ajax("/Web/WebService/CorseListService.asmx/ModifyCorse", parseString({ timeItem: item }),
                    function (res) {
                        var data = eval("(" + res.d + ")");
                        if (data.result == 1) {

                            $("#btnCommit").attr("disabled", false);
                            $("#btnCommit").show();

                            if (item.Id == 0) {
                                calendar.fullCalendar('renderEvent',
                                    data.item,
                                    true // make the event "stick"
                                );
                            }
                            else if (item.Id > 0)
                            {
                                var event = $('#calendar').fullCalendar('clientEvents', item.Id)[0];
                                //event = data.item;
                                //event.id = timeItem.Id;
                                event.title = data.item.title;
                                event.start = data.item.start;
                                event.end = data.item.end;
                                event.allDay = data.item.allDay;
                                event.courseType = data.item.courseType;
                                event.courseID = data.item.courseID;
                                event.classID = data.item.classID;
                                event.classRoomID = data.item.classRoomID;
                                event.teacherID = data.item.teacherID;
                                event.startType = data.item.startType;
                                event.endType = data.item.endType;
                                event.backgroundColor = data.item.backgroundColor;
                                event.year = data.item.year;
                                calendar.fullCalendar('updateEvent', event);
                            }

                            close();
                        }
                        else {
                            alert(data.item);
                        }
                    });

后台被调用方法:

[WebMethod(EnableSession = true)]
    public string ModifyCorse(NewTimetableMore timeItem)
    {
        UserInfo user = new UserInfo();
        if (Session["UserBase"] != null)
        {
            user = (UserInfo)Session["UserBase"];
        }
        string result = JsonConvert.SerializeObject(new { result = 0, item = "保存失败,请稍后重试!" });
        if (timeItem != null)
        {
            bool flag = false;
            CalendarItem calendar = new CalendarItem();
            timeItem.UpdateDate = DateTime.Now;
            timeItem.UpdateId = user.Id;
            //如果选择的是开始时间的上午和结束时间的下午就按照全天写入DB
            if (timeItem.StartTimeType == 1 && timeItem.EndTimeType == 2)
            {
                timeItem.StartTimeType = 0;
                timeItem.EndTimeType = 0;
            }
            //如果是新增记录,则使用当前年份
            if (timeItem.Id == 0)
            {
                timeItem.Year = timeItem.Year ?? System.DateTime.Now.Year;
            }
            timeItem.LengthTime = GetSingleCourseLengTime(timeItem.StartTime, timeItem.StartTimeType, timeItem.EndTime, timeItem.EndTimeType);
            //检查该课程的排课时长是否允许添加该排课
            double LeaveTime = nTm.GetCourseTimeLeaveTime(timeItem.SchoolId, (timeItem.Year ?? 0), timeItem.ClassId, timeItem.CourseId, timeItem.CourseType, timeItem.Id);
            if (LeaveTime < timeItem.LengthTime)
            {
                result = JsonConvert.SerializeObject(new { result = 0, item = (LeaveTime > 0 ? string.Format("该课程剩余时长为 {0} 天,请缩短排课天数!" , LeaveTime) : "该课程排课时间已满,无法再添加课程时长!") });
                return result;
            }

            if (timeItem.Id == 0)
            {
                timeItem.DataState = 1;
                timeItem.CreateDate = DateTime.Now;
                timeItem.CreateId = user.Id;
                NewTimetable DBTimeItem = new NewTimetable();
                TryUpdateModel(DBTimeItem, timeItem);
                int TimeID = nTm.Add(DBTimeItem);
                if (TimeID > 0)
                {
                    flag = true;
                    timeItem.Id = TimeID;
                }
            }
            else if (timeItem.Id > 0)
            {
                var item = nTm.GetModel(timeItem.Id);
                item.SchoolId = timeItem.SchoolId;
                item.CourseType = timeItem.CourseType;
                item.CourseId = timeItem.CourseId;
                item.ClassId = timeItem.ClassId;
                item.Classroom = timeItem.Classroom;
                item.TeacherId = timeItem.TeacherId;
                item.StartTime = timeItem.StartTime;
                item.EndTime = timeItem.EndTime;
                item.EndTimeType = timeItem.EndTimeType;
                item.StartTimeType = timeItem.StartTimeType;
                item.LengthTime = timeItem.LengthTime;
                item.UpdateDate = timeItem.UpdateDate;
                item.UpdateId = timeItem.UpdateId;
                flag = nTm.Update(item);
            }

            if (flag)
            {
                calendar.id = timeItem.Id;
                calendar.title = GetTitleMoreInfo(timeItem);
                calendar.start = timeItem.StartTime.ToString("yyyy-MM-dd");
                calendar.end = timeItem.EndTime.ToString("yyyy-MM-dd");
                //calendar.allDay = (timeItem.StartTimeType == 0 && timeItem.EndTimeType == 0);
                calendar.allDay = true;
                calendar.courseType = timeItem.CourseType;
                calendar.courseID = timeItem.CourseId;
                calendar.classID = timeItem.ClassId;
                calendar.classRoomID = timeItem.Classroom;
                calendar.teacherID = timeItem.TeacherId;
                calendar.startType = timeItem.StartTimeType;
                calendar.endType = timeItem.EndTimeType;
                calendar.backgroundColor=BackGroundColorList[timeItem.CourseType - 1];
                calendar.year = timeItem.Year;
                result = JsonConvert.SerializeObject(new { result = 1, item = calendar });
            }
        }
        return result;
    }

向后台方法传递参数是数组时的实例:

前台:

相当于调用时参数形式为:CustomerID=1001&CustomerID=1002&CustomerID=1003这种形式可以调用后台参数为string[] CustomerID的参数
此处前台之所以用escape方法,是因为Content参数是html代码,后台接受时用Content = Server.UrlDecode(Content);解密获取参数。

var val = [];
                $(".scrollBox2b li.cur").each(function () {
                    //$(this).hasClass("cur") && val.push($(this).attr("data-cid"));
                    val.push($(this).attr("data-cid"));
                })

                if (val.length > 0) {
                    $.get("@Url.Action("MailContentMode")", function (data) {
                        var MailContent = data.replace("$EmailContent$", $("#calcResult").html());
                        var param = "CustomerID=" + val.join("&CustomerID=") + "&Subject=" + escape(escape("房贷计算结果")) + "&Content=" + escape(escape(MailContent));
                        $.post("@Url.Action("SendEmail")", param, function (data) {
                            alert(data.msg);
                        })
                    })
                }
                else {
                    alert("请至少选择一个客户!");
                }

后台被调方法:

public ActionResult SendEmail(Guid[] CustomerID, string Subject, string Content)
        {
            string Msg = "发送失败,请稍后重试!";
            int result = 0;
            Subject = Server.UrlDecode(Subject);
            Content = Server.UrlDecode(Content);
   var Customers = new CustomerService().Filter(p => CustomerID.Contains(p.ID)).ToList();
            Customers = Customers.Where(p=>p.Email.IsEmail()).ToList();
            var mail = new FocusEmail
            {
                Subject = Subject,
                Body = Content,
                IsBodyHtml = true
            };
            List<FocusReceiver> Receivers=new List<FocusReceiver>();
            foreach (var cus in Customers)
            {
                Receivers.Add(
                    new FocusReceiver
                    {
                        Email = cus.Email,
                        FullName = cus.Name
                    }
                );
            }
            if (Receivers.Count() > 0)
            {
                if (Email.Send(mail, Receivers.ToArray()).ToLower() == "success")
                {
                    Msg = "发送成功";
                    result = 1;
                }
                else
                {
                    Msg = "发送失败,请稍后重试!";
                    result = -1;
                }
            }
            else
            {
                Msg = "发送失败,没有有效的邮箱";
                result = -2;
            }
            return Json(new { result = result, msg=Msg });
        }

再如:

前台:
var cid = [], rid = [], fid = $("#FID").val();
  $(".data_distribution_table tbody :checkbox[name=cid]:checked").each(function () { cid.push($(this).val()) })
  $(".label_w :checkbox[name=rid]:checked").each(function () { rid.push($(this).val()) })
  if (!$(".table_d").hasClass("disabled")) {
   $.post("@Url.Action("Alloc")", "c), function (res) {
    alertE(res.msg);
   })
  }

后台:
public ActionResult Alloc(Guid[] cid, Guid[] rid)
  {
   var cl = cid.Length;//客户数
   var rl = rid.Length;//顾问数
   var size = cl / rl;//每人分配数
   var lft = cl % rl;//剩余未分配数
   var offset = 0;
   var ser = new CustomerService();
   var iser = new ImportCustomerService();
   for (var i = 0; i < rl; i++)
   {
    List<Guid> lcid = new List<Guid>(size);
    for (var j = 0; j < size; j++)
    {
     var idx = i * size + j + offset;
     if (cl > idx) lcid.Add(cid[idx]);
    }
    if (i < lft)
    {
     var idx = (i + 1) * size + offset;
     offset++;
     if (cl > idx) lcid.Add(cid[idx]);
    }
    var trid = rid[i];
    ser.Update(p => lcid.Contains(p.ID), p => new Customer { RealtorID = trid });
   }
   foreach (var item in iser.Filter(p => p.Customer.Any(x => cid.Contains(x.ID))).Select(p => new { p.ID, Cnt = p.Customer.Count(x => x.RealtorID.HasValue) }).ToList())
   {
    var iid = item.ID;
    var icnt = item.Cnt;
    iser.Update(p => p.ID == iid, p => new ImportCustomer { DistributionRate = icnt });
   }
   return Json(new { success = true, msg = "分配成功" }, JsonRequestBehavior.AllowGet);
  }


js绑定select:

bindSelect = function (selectid, jsondata) {
    addSelectNullItem(selectid);
    for (var item in jsondata) {
        addSelectItem(selectid, jsondata[item].Display, jsondata[item].Value);
    }
}

addSelectItem = function (selectid, text, value) {
    $("#" + selectid + "").append("<option value='" + value + "'>" + text + "</option>");
}

addSelectNullItem = function (selectid) {
    $("#" + selectid + "").empty();
    $("#" + selectid + "").append("<option value='-1'>--请选择--</option>");
}

//加载类别信息
    function tmpSmsLoadCategory(data) {
        var c = $('#selectID').html('');
        for (var i in data) {
            $('<option></option>').text(data[i].ExtValue).val(data[i].ExtCode).appendTo(c);
        }
    }

// 对Date的扩展,将 Date 转化为指定格式的String  
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,  
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)  
// 例子:  
// (new Date()).format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423  
// (new Date()).format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18  
Date.prototype.format = function (fmt) { //author: meizz  
 var o = {
  "M+": this.getMonth() + 1,                 //月份  
  "d+": this.getDate(),                    //日  
  "h+": this.getHours(),                   //小时  
  "m+": this.getMinutes(),                 //分  
  "s+": this.getSeconds(),                 //秒  
  "q+": Math.floor((this.getMonth() + 3) / 3), //季度  
  "S": this.getMilliseconds()             //毫秒  
 };
 if (/(y+)/.test(fmt))
  fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
 for (var k in o)
  if (new RegExp("(" + k + ")").test(fmt))
   fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
 return fmt;
}