由于不知道作者是如何设计的,不值得dwz框架如何得到选定行的某列的值,看示例还得设这什么row,rel属性,不如改进一下,方便自己使用。
需要解决3个问题:
1、前台页面table自定义事件处理函数问题
2、前台页面自定义函数接收dwz框架传递过来的参数(实际上是tr的click事件,但是是在dwz框架里)
3、如果一个页面有两个table,他们之间相互影响吗? (这个问题实际上现在就可以回答,但是还是用例子验证一下比较好。经过验证,两个table不会冲突,因为想一下jquery的原理,他是对每个table进行了事件绑定,所以影响不会超出他绑定的table。这个对于理解dwz那复杂的jquery的$代码还是有好处的。)
个人理解:dwz框架对检索到的当前页面的每个table都执行了jTable()函数,即对该table该绑定的事件都绑定了,但是如果在jtable的开头声明一个变量的话,两个table初始化时会不会相互影响呢。说到底dwz 是个js框架,js都是函数,最终都是要在同个页面解释执行的,后者很可能会覆盖前者的变量。不考虑这么多了,反正我增加的自定义事件,只是初始化时把函数名传过来,最终还是在本table的tr的click中执行的,因此变量只是起了个传递的作用,外部并不调用它。因此,执行上没有问题,而且我也已经验证过了多个table不会影响。
下面就上代码吧:
1.dwz.ui.js
//tables
//alert('初始化dwz.ui.table');
//alert($("table.table", $p).length);
//原来的初始化语句
//$("table.table", $p).jTable();
//优化后的初始化语句,让外部可以获取到点击某行选中的值
$("table.table", $p).each(function(){
var $this=$(this);
var opts={};
if ($this.attr("onselrow")) opts.onselrow= $this.attr("onselrow");
$this.jTable(opts);
});
2.dwz.stable.js
$.fn.jTable = function(options){
//alert('运行dwz.stable.jtable');
//alert(options);
var onselrow=options.onselrow; //!!dwz初始化时,将页面的table的onselrow属性规定的函数名字传进来。
//alert(onselrow);
......
........
$tr.click(function(){
//根据前台页面table设置的onselrow事件处理函数名字,在这里加上参数,形成新的函数,并调用。
//即:在这个js框架里获取到选定行的第0列的值,然后传递给前台的js函数中。
//1.要求前台onselrow="doseltablerow_menulist",只传函数名字,不带();
//2.要求前台js要有对应接收参数:function doseltablerow_menulist(a1){....}
//alert('选择了行');
//alert($tr.find("td").length);
var $this=$(this);
//alert($this.find("td:first").text());
var col0=$this.find("td:first").text();
//alert("col0="+col0);
if(onselrow!=null && onselrow!="undefined")
{
var newfunc=onselrow + "('" + col0 + "');";
//alert(newfunc);
eval(newfunc);
}
//
$trs.filter(".selected").removeClass("selected");
.....
3.前台js和html
<script>
function doseltablerow_menulist(a1)
{
//alert(a1);
var $edt_key=$("#tbl_menulist_selrowkey");
$edt_key.val(a1);
}
</script>
<div class="panelBar">
<ul class="toolBar">
<li><a class="add" href="#" οnclick="alert({sid_user});return false;"><span>添加</span></a></li>
<li><a class="delete" href="demo/common/ajaxDone.html?uid={sid_user}" target="ajaxTodo" title="确定要删除吗?" warn="请选择一个用户"><span>删除</span></a></li>
<li><a class="edit" href="demo_page4.html?uid={sid_user}" target="navTab" warn="请选择一个用户"><span>修改</span></a></li>
<li class="line">line</li>
<li><a class="icon" href="demo/common/dwz-team.xls" target="dwzExport" targetType="navTab" title="实要导出这些记录吗?"><span>导出EXCEL</span></a></li>
<li><a class="icon" href="javascript:$.printBox('w_list_print')"><span>打印</span></a></li>
</ul>
</div>
<div id="w_list_print">
<input id="tbl_menulist_selrowkey" type='text'>
<table id='tbl_menulilst' class="table" onselrow="doseltablerow_menulist" width="98%" targetType="navTab" asc="asc" desc="desc" layoutH="100">
<thead>
<tr valign='middle'>
<th align='center' style='display:none'>编码</th>
<th align='center'>菜单名称</th>
<th align='center'>链接地址</th>
<th align='center'>默认图标</th>
<th align='center'>打开图标</th>
</tr>
</thead>
<tbody>
<%
if(rs.size()>0)
{
for(int i=0;i<rs.size();i++)
{
//String menu_id=((HashMap)rs.get(i)).get("menu_id")==null?"":((HashMap)rs.get(i)).get("menu_id").toString();
String menu_bm=db.getListValue(rs,i,"right_bm");
String menu_name=db.getListValue(rs,i,"meunname");
String menu_link=db.getListValue(rs,i,"link_addr");
String menu_ico=db.getListValue(rs,i,"imgname");
String menu_icoopen=db.getListValue(rs,i,"imgnameopen");
String menu_name_color=menu_bm.length()==3?"<font color='red'>" + menu_name + "</font>":menu_name;
//
out.println("<tr class='tr_row' target='sid_user' rel='"+i+"' >");
//out.println(" <td align='left'>" + menu_id + "</td>");
out.println(" <td align='left' style='display:none'>" + menu_bm + "</td>");
out.println(" <td align='center'>" + menu_name_color + "</td>");
out.println(" <td align='center'>" + menu_link + " </td>");
out.println(" <td align='center'>" + menu_ico + " </td>");
out.println(" <td align='center'>" + menu_icoopen + " </td>");
out.println("</tr>");
}
}
%>
</tbody>
</table>
<div class="panelBar">
<div class="pages">
<span>显示</span>
<select class="combox" name="numPerPage" οnchange="navTabPageBreak({numPerPage:this.value})">
<option value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
<option value="200">200</option>
</select>
<span>条,共${totalCount}条</span>
</div>
<div class="pagination" targetType="navTab" totalCount="200" numPerPage="20" pageNumShown="10" currentPage="1">
</div>
</div>
</div>