【原创】为ASP.NET树控件TreeView添加双击事件

首先在TreeView控件上注册双击事件的客户端调用,示例如下

<asp:TreeView ID="TV_VC" runat="server" ondblclick="return TV_VC_DoubleClick();">

或者你要是动态添加TreeView的话,就在适合的地方这样写

TV_VC.Attributes.Add("ondblclick", "javascript:return TV_VC_DoubleClick();");

其次编写相应的JavaScript事件函数声明,示例如下

function TV_VC_DoubleClick() {
// add your code here
alert('双击TreeView被触发');
}

一个简单的TreeView双击事件就添加好了。


至此,工作还没有结束。我们发现,在TreeView的任何区域双击鼠标都会触发这个双击事件,即便那是一块空白区域。这显然与我们的初衷不符,那么不妨修改一下。

function TV_VC_DoubleClick() {
evt
= window.event;
if (evt) {
var obj
= evt.srcElement ;
if (obj.tagName.toUpperCase() == 'A'){
    
// add your code here
    alert('双击TreeView被触发');
   }
   
// Collect Garbage
obj = null;
delete obj;
CollectGarbage();
}
}

在你的IE中调试一下吧,现在我们发现只有双击在TreeNode节点上,才会响应双击事件。大功告成了吗?


可惜还没有,鉴于不同浏览器内核对DOM的支持差异,刚才的代码对常见浏览器支持有限,仅能运行于IE、Safari和Opera等;对于FireFox和Netscape浏览器还不支持响应。别着急,我们再改改^_^

在事件调用部分代码需要加入事件参数传递,示例如下

<asp:TreeView ID="TV_VC" runat="server" ondblclick="return TV_VC_DoubleClick(event);">

TV_VC.Attributes.Add("ondblclick", "javascript:return TV_VC_DoubleClick(event);");

在事件函数声明部分需要加入对不同浏览器DOM解释器的支持

function TV_VC_DoubleClick(evt) {
evt
= evt ? evt : (window.event ? window.event : null);
if (evt) {
var obj
= evt.srcElement ? evt.srcElement : evt.target;
if (obj.tagName.toUpperCase() == 'A'){
    
// add your code here
    alert('双击TreeView被触发');
}
   
// Collect Garbage
obj = null;
delete obj;
CollectGarbage();
}
}

posted on 2011-04-07 15:31  hysoka  阅读(3351)  评论(2编辑  收藏  举报

导航