您的位置:首页 > Web前端 > Node.js

获取Asp.net中Treeview控件的Node双击"事件"!

2009-08-10 16:15 218 查看
今天的开发工作涉及到Treeview控件,其中有需求是双击Node结点然后向一个List控件中添加一条信息,找了很多的资料,其中关于获取双击的大概是在02年或者03年时候的一个Treeview控件,但是在ASP.net2.0中控件的行为有所改变,而且并不像第三方控件那样支持很多的客户端事件,在添加Node的时候,我们不能够使用类似普通控件那样在Attributes中增加OnDblClick的事件的处理代码.

通过查看Asp.Net生成的前端的HTML代码,可以发现最终生成的TreeView的前端展示是一个DIV,那么我们其实可以通过通过Div的双击事件来进一步处理,所以,我们首先先在PageLoad事件中向TreeView控件增加双击的客户端事件代码:

this.tvDept.Attributes.Add("ondblclick", "javascript:return treeNode(event, '')");
在客户端的事件中,如果我们能够得到Node结点的相关引用,那么事情就会变得简单的多了,但是很不幸,由于Treeview控件没有对客户端进行支持,所以我们并不能够直接得到Node结点的引用,但是我们可以通过DOM来进一步找到相关的Node结点.通过试验,我发现通过参数传进来的event.srcElement可以得到Node的在DOM中的引用,更幸运的时这个属性有一个nameProp属性可以得到引发这个双击时的链接的值,有了这个信息解决这个问题就比较简单了,通过在程序中动态生成Node结点的时候将NavigateUrl指定为一段Javascript代码,例如:subNode.NavigateUrl = "javascript:var x='" + subNode.Value + "';",然后在treeNode事件中使用eval来创建x这个变量,然后直接使用这个变量就可以了.完整的treeNode事件代码如下所示:

function treeNode(mEvent, text) {
var o;
// IE
if (mEvent.srcElement) {
o = mEvent.srcElement;
}
// Netscape 和 Firefox
else if (mEvent.target) {
o = mEvent.target;
}

if (o.tagName == 'A' || o.tagName == 'a') {
eval(o.nameProp);
alert(x);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: