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

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

<asp:TreeView 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 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();

}

}