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

//检查日期是否合法,格式为yyyy-MM-dd的,这是目前找到的最准确的日期合法正则表达式

function check_Date(obj) {

var value = $(obj).val();

if (value != "") {

//var date_Format = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;

var date_Format = /(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)/;

if (!date_Format.test(value)) {

$(obj).val("");

alert("您输入的不是有效日期,请重新输入!");

}

}

}

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

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 = "Customer&Customer&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;

}