然后在flexigrid初始化参数中设置:onSuccess:function(){set_exeBtn(”gridtable”);},这表示flexigrid加载完成后执行set_exeBtn函数,该函数向flexigrid的右下角加入了一个名为“执行”的按钮,并且为该按钮定义了事件updateState,该事件的定义如下:
- function updateState(id){
- //最后
- $("#"+id+" tr td:last-child div:first-child").each(function(){
- var op = $(this).text();
- if(op == "无操作")return;
- else{
- var ids = $(this).parents("tr:first").children("td:first").children("div:first").text();//假定第一行的值为记录的id
- var newStateVal = $("span:first",this).attr('lang');
- $.ajax({
- url:"update_msgState.php",
- type:"POST",
- dataType:"text/html",
- data:"ids="+ids+"&ps="+newStateVal,
- success:function(data){
- if(data == "success"){
- //reloadGrids(id); 自定义执行成功后的函数调用,可以重新调用flexigrid或者做其他操作
- }
- else{
- alert("执行过程遇到错误");
- }
- },
- error:function(msg){
- alert(msg);
- }
- });
- }
- });
- };
该事件的简要说明:该事件检查flexigrid的最后一列的值,如果不等于无操作,将以ajax的方式执行update_msgState.php程序,该程序主要用于更新flexigrid中的记录项的状态字段值,和一般程序也没什么两样,执行成功会输出success,在这里必须提及我对flexigrid.js文件的两处改动:
- //大概1421行
- $.fn.flexReload = function(p) { // function to reload grid
- return this.each( function() {
- if (this.grid&&this.p.url){
- //roby added 2 lines 针对url参数和onSuccess被自定义后却并没有起作用,自行设置的,其他项如果也是如此,可以采用此种方法
- if(p.url!=undefined) this.p.url=p.url;
- if(p.onSuccess!=undefined) this.p.onSuccess=p.onSuccess;
- if(p.sortname!=undefined){this.p.sortname=p.sortname;this.p.sortorder=p.sortorder;} this.grid.populate();}
- });
- }; //end flexReload
- //大概389行
- if (p.total==0)
- {
- $('tr, a, td, div',t).unbind();
- $(t).empty();
- p.pages = 1;
- p.page = 1;
- this.buildpager();
- $('.pPageStat',this.pDiv).html(p.nomsg);
- //roby added 1 line 这里主要是为了使onSuccess在即便flexigrid初始化调用获得的数据为空时仍然会执行(默认不执行,至于应不应该这么做,还是看具体需求吧,我在后面的例子中会用到)
- if (p.onSuccess) p.onSuccess();
- return false;
- }
写到这里,发现篇幅已经很长,而且在方式上我想最好是给出一些在线的demo,这个工作我往后有时间了再整理吧,其他的将在后续文章中完成,感谢各位的支持。