最近在做人事管理系统的一个签到功能,首先是把部门当做参数,把参数用Ajax发送到数据库进行查询,然后以表格形式动态生成员工信息到返回页面的Div里,表格最后的一列是签到按钮,这时我想用JQuery继续获取被点击的“签到”按钮,然后用Ajax将数据发送到数据库签到表,更新签到表,于是我就把每个签到按钮的id属性设置成第一次Ajax返回的每个员工信息的工号,再次用JQuery获取,怎么获取呢?想到了标签加事件选择器,于是写了下面代码:
$(function(){
$("tr input:button").click(){
$.ajax({
type: "POST",
url: "page_helper.ashx",
data: "name=K&pid" + $(this).attr("id"),
success: function (html) {
$("#ReturnHTML").html(html);
},
error: function () {
alert("服务器繁忙,请稍后再试!");
}
});
}
});
可是后来点击却发现没有获取到点击事件,点击按钮根本就没有反应,当我用浏览器查看返回的源码的时候,发现原来Ajax返回的HTML代码根本就没有被添加到页面中,这回怎么办呢?后来去百度里检索了半天,都说Ajax返回的数据无法用浏览器查看到源码,因为是异步的,检索了一天,头又大又疼,于是就晚上了,每次遇到大的问题,就赶紧睡觉,在梦中想实现方法,这样一方面可以休息,另一方面也可以解决问题,一般的时候第二天问题都会有答案,也都能实现。
第二天早晨醒来,思路还是没有,我想这次应该是大问题了,是不是我想要实现的不可能实现呢?百度里几乎没有用两次Ajax请求的,无奈之下在QQ空间发布了悬赏求助,悬赏是宴请三天三夜,后来终于我伟大的高中同学给了我帮助,当然不是因为悬赏才帮助我的,哈哈哈。
高中同学是这么说的,Jquery中有个live方法,可以获取动态生成的HTML代码元素,后来我就把live方法敲了进去,看了有三个参数event,data,function;于是查看了Jquery的帮助文档。
event:必需,规定附加到元素的一个或多个事件,由空格分隔多个事件。必须是有效的事件。
data:可选,规定传递到该函数的额外数据。
function:必需,规定当前事件发生时运行的函数。
这时的我这时大旱逢甘霖啊,于是写下下面代码:
$(function(){
$("tr input:button").live("click",function () {
$.ajax({
type: "POST",
url: "page_helper.ashx",sans-serif;font-size:12px;background-color:#ffffff;margin-top:4px;margin-bottom:4px;">
data: "name=JS&pid=" + $(this).attr("id") + jsparam(),sans-serif;font-size:12px;background-color:#ffffff;margin-top:4px;margin-bottom:4px;">
success: function (html) {
alert(html);
},sans-serif;font-size:12px;background-color:#ffffff;margin-top:4px;margin-bottom:4px;">
error: function () {
alert("服务器繁忙,请稍后再试!");
});
}
});
这次奇迹出现了,Ajax返回的按钮单击事件被获取到了,下面的Ajax异步过程也调用成功了,那种喜悦不能言表。
如果我放弃了这次求助,以后遇到同样的问题,我可能换一种思路,会用a标签代替按钮,跳转到另一界面,操作起来太麻烦了,哪个用户见到这样的效果都会恶心至极,同学这样的帮助岂三天三夜的宴请足矣?