实现 js 或者 JQuery 的网页预约功能,我之前在网上找了一段代码,想改一改,但是看不懂,JQuery代码在下面

wangdan_2013 2016-09-24 09:32:18

JQuery代码

$(function() {
var today = new Date();
$("input[name = btn-my]").click(function() {
location.href = "myrecord.jsp";
});
$(".ckRadio2:first").addClass("btn-info");
$(".ckRadio2").each(function(i) {
var newdate = new Date();
newdate.setDate(today.getDate() + i)
var day = newdate.format("yyyy-MM-dd");
$(this).attr("date",day);
$(this).html(day);
});
$(".ckRadio2").click(function() {
$(".ckRadio2").removeClass("btn-info");
$(this).addClass("btn-info");
getVenues();
});

$.post("sport/getSportInfo.action", {}, function(data, status) {
$("#sports ul").empty();
$("#sports ul").append("<li><a sportId=0 class='ckRadio1'>不限</a></li>");
var sportJson = data.data.Sport;
$(sportJson).each(function(i) {
$("#sports ul").append("<li><a sportId=" + sportJson[i].sportId + " class='ckRadio1'>" + sportJson[i].sportName + "</a></li>");
});
$(".ckRadio1:first").addClass("btn-info");
$(".ckRadio1").click(function() {
$(".ckRadio1").removeClass("btn-info");
$(this).addClass("btn-info");
var sportId = $(this).attr("sportId");
$(".venuesItem").parent().hide().end()
.removeClass("btn-info")
.filter(sportId == 0? "[sportId!=0]": "[sportId=" + sportId + "]").parent().show().end()
.eq(0).addClass("btn-info");
getVenues();
});
getVenues();
}, "json");

$("[name='btn-reserve']").click(getReserve);
});

function getReserve() {
$(".selected").each(function() {
/**
* 根据所在行,获得当前预约的时间段,和预约的日期,并进行相应的格式化,转化为预约开始时间和预约结束时间
* 根据所在的列数获得场地号
*/
var time = $(this).parent().find("th").text();
var location = $(this).prevAll().length;
var hours = time.split("-")[0].split(":")[0];
var datetime = new Date($('.ckRadio2.btn-info').attr("date"));
datetime.setHours(parseInt(hours));
var startTime = datetime.format("yyyy-MM-dd hh:mm:ss");
datetime.setHours(parseInt(hours) + 1);
var endTime = datetime.format("yyyy-MM-dd hh:mm:ss");

//预约提交的参数
var params = {
"venuesId": $(".venuesItem.btn-info").attr("venuesId"),
"location": location,
"startTime": startTime,
"endTime": endTime
};

//为了使ajax回调函数中能访问到当前表格单元,将其存入变量$td中
var $td = $(this);

$.post("reserve/makeReserve.action", params, function(data, status) {
//如果预约成功,则将原来的“useable”变为“occupied”,并且解除点击事件,不可预约
if(data.message.result == "success") {
$td.removeClass().addClass("occupied").unbind("click");
}
var mesg = data.message.result == "success" ? "预约成功" : "预约失败";
//在表格下方展示此次预约的结果,包括详细信息
$(".reserveResult").append("<p>" + mesg + ":" + $(".venuesItem.btn-info").text() + ",场地"+ params.location
+",时间:" + params.startTime +" 到 " + params.endTime + "</p>");
}, "json");
});
}

function submitQuery() {

/**
* 获取查询的日期和场馆id
*/
var date = $(".ckRadio2").filter(".btn-info").attr("date");

var sportId = $(".ckRadio1.btn-info").attr("sportId");
var venuesId = $(".venuesItem.btn-info").attr("venuesId");

/**
* ajax查询已经预约的列表
*/
$.post("venues/getVenuesRecordList.action", {"venuesId": venuesId, "queryDay": date}, function(data, status) {

var venues = data.data.Venues;

/**
* 场馆的信息
* @Param venuesNum 场地的总数
* @Param venuesName 场馆的名称,表格中场地使用“场馆名” + “场地号”表示
* @Param openTime 开放时间
* @Param closeTime 结束时间
* @Param record 指定日期,该场馆的预约列表
*/
var venuesNum = parseInt(venues.venuesNum);
var venuesName = venues.venuesName;
var openTime = parseInt(venues.openTime.split(":")[0]);
var closeTime = parseInt(venues.closeTime.split(":")[0]);

var record = venues.Record;

//清空当前预约table
$("#resourceTable").empty();

//设置表头:场地
var tbRow = "<tr><th></th>";
for (var i = 1;i <= venuesNum; i ++)
tbRow += "<th>" + venuesName + i + "</th>";
tbRow += "</tr>";
$("#resourceTable").append(tbRow);

//从开放时间到关闭时间,每一小时为一个预约时间段
for (var time = openTime; time < closeTime; time ++) {
var show_time = time + ":00-" + (time + 1) + ":00";
tbRow = "<tr><th>" + show_time + "</th>";
for (var i = 1;i <= venuesNum;i ++)
tbRow += "<td></td>";
tbRow += "</tr>";
$("#resourceTable").append(tbRow);
}

var first_row = openTime;
var today = new Date();
//判断预约的时间是否为今天,如果是今天就将过期的时间设置为当前时间(小时)
var end_row = today.getDate() < (new Date(date)).getDate()? first_row - 1: parseInt((new Date()).getHours());
//对table的每一行,如果是在过期时间之前的时间段,就将这一行所有td的class设置为“outtime”,表示不可预约,否则class设置为“useable”表示可预约。
$("#resourceTable tr").each(function(i) {
$(this).find("td").addClass(i + first_row <= end_row? "outtime": "useable");
});

//开始遍历,根据每条预约记录的开始时间和场地,生成对应的行坐标和列坐标,找到表格中对应位置的td删除本身的class,增加“occupied”表示对应时段该场地已经被预约
$(record).each(function(i) {
var row = parseInt(record[i].startTime.split(":")[0]) - openTime + 1;
var col = parseInt(record[i].location) - 1;
console.log("row:"+row+",col:"+col);
$("#resourceTable tr").eq(row).find("td").eq(col).removeClass().addClass("occupied");
});

//为所有可以预约的td绑定一个click事件,即点击表示选中,再点一次恢复原来状态,直到点击预约按钮预约成功后,解除click事件,并由“useable”变为“occupied”
$("tr .useable").bind("click", function() {
$(this).toggleClass("selected");
});

}, "json");
}

function getVenues() {
if ($(".search").find(".venuesItem")[0]) {
submitQuery();
return;
}
$.post("sport/getSportVenues.action", {"dataType":"json"} ,function(data, status) {
var $ul = $("<ul></ul>");
var sport = data.data.Sport;
$(sport).each(function(i) {
var sportId = sport[i].sportId;
var venues = sport[i].Venues;
$(venues).each(function(k) {
var $li = $("<li><a>" + venues[k].venuesName + "</a></li>")
.find("a").addClass("venuesItem").attr("sportId",sportId).attr("venuesId",venues[k].venuesId)
.end();
$ul.append($li);
});
});
$(".search").addClass("choose").append($ul);

// $(".venues_item:first").addClass("btn-info");
var sportId = $(".ckRadio1:first").attr("sportId");
$(".venuesItem").parent().hide().end()
.removeClass("btn-info")
.filter(sportId == 0? "[sportId!=0]": "[sportId=" + sportId + "]").parent().show().end()
.eq(0).addClass("btn-info")
.end().end()
.click(function() {
$(".venuesItem").removeClass("btn-info");
$(this).addClass("btn-info");
submitQuery();
});
submitQuery();
});
}
Date.prototype.format = function (fmt) {
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;
}
...全文
1448 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
花钱让别人帮你弄了,整一个系统了,这里是解决问题的,不是来帮你做系统的。自己多学点基础
wangdan_2013 2016-09-24
  • 打赏
  • 举报
回复
wangdan_2013 2016-09-24
  • 打赏
  • 举报
回复
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>预约</title> <link rel="stylesheet" href="css/base.css"/> <link rel="stylesheet" href="css/floor.css"/> <link rel="stylesheet" href="css/bookview.css"/> <link rel="stylesheet" href="css/main.css"/> <script src="js/jquery-1.11.1.min.js"></script> <script src="js/bookview.js"></script> </head> <body> <div> <!--<div> <img src="img/dlut.jpg" class="logo"/> </div>--> <div id="nav"> <ul> <li><a href="main.jsp">首页</a></li> <li><a href="bookview.jsp">预约</a></li> <!--<li><a href="courtinfo.jsp">场馆管理</a></li>--> <li><a href="login.html">登录</a></li> <li><a href="aboutus.html">联系我们</a></li> </ul> </div> <div> <div class="choose" id="sports"> <div>学习项目选择</div> <!-- 以下部分应由js动态生成 --> <ul> <li><a>C1</a></li> <li><a>C2</a></li> </ul> </div> <div class="choose"> <div>日期选择</div> <ul> <li><a class="ckRadio2"></a></li> <li><a class="ckRadio2"></a></li> <li><a class="ckRadio2"></a></li> <li><a class="ckRadio2"></a></li> </ul> <font color="red">注:只显示当日及后三日场地情况。</font> </div> <div class="search"> <strong>搜索结果:</strong> </div> <div class="notice"> 注:<div class="occupied">  </div>为已被占用场地 <div class="outtime">  </div>为已过期场地 <div class="useable">  </div>为可预约场地 </div> <table > <tbody id="resourceTable"> <!-- 以下部分应由js动态生成 --> <tr> <th></th> <th>王教练</th> <th>张教练</th> <th>飞教练</th> <th>偶教练</th> <th>想教练</th> <th>是教练</th> <th>她教练</th> <th>有教练</th> <th>没教练</th> </tr> <tr> <th>9:00-10:00</th> <td class="outtime"></td> <td class="outtime"></td> <td class="occupied"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> </tr> <tr> <th>10:00-11:00</th> <td class="outtime"></td> <td class="outtime"></td> <td class="occupied"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> <td class="outtime"></td> </tr> <tr> <th>11:00-12:00</th> <td class="useable"></td> <td class="useable"></td> <td class="useable"></td> <td class="useable"></td> <td class="useable"></td> <td class="useable"></td> <td class="useable"></td> <td class="occupied"></td> <td class="occupied"></td> </tr> </tbody> </table> <div class="btn-area"> <input type="button" name="btn-reserve" value="预约场地"/> <input type="button" name="btn-my" value="查看我的预约"/> </div> <div class="reserveResult"> </div> </div> </div> <div id="bottom"> Copyright © 2015 - 2016 DutGym.All Rights Reserved.<br> DUT体育馆创新项目团队 版权所有 </div> </body> </html> 这个是HTML代码

52,778

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧