【一个神奇的问题】Treeview控件中如何取得每个节点的Value

ksmark 2012-02-13 04:28:04
我用了一个Treeview控件,在页面中加载了我所有的节点。
用js的方法取每个节点的value。目的就是通过取得的value用ajax方法来判断此人是否有权限打开这个目录。
取节点value的代码如下:

<script language ="javascript" type ="text/javascript" >
function TView_Click() {
var obj = event.srcElement;
alert(obj.href);//我想,此处就是取得节点的value吧。网上是这么写的。但是我的value不是放在NavigateUrl中的,我直接赋值给节点的value的。所以当点击最后一个节点时,显示出来的都是url地址,不是我要的value值。
//也就是说我如何在js代码中取到每个节点的value值。是不是除了放在NavigateUrl中,其它地方都取不到呢?
。。。接下来的代码还没有写,因为这一步还没有实现,下载就不好写了。

}


</script>

前台代码,在Page_Load()中,我加了下面的代码,来实现点击Treeview来执行js代码。

TView.Attributes.Add("onclick", "TView_Click();");
...全文
217 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ksmark 2012-02-14
  • 打赏
  • 举报
回复
还是不行,我把它放在form的onclick事件中,onclick ="test()"

还有,我不知道你说的 this.href="javascript:void(0)"; 改成自己的函数,不知道怎么改,我的节点上的连接都是在后台给添加的。不是在前台。

原本我是把您的代码房子TView的onclick事件中,结果就报错了,按照您说的放在它之后,也出现相同的错误。

另外我还想咨询一下您啊。

我在点击节点时,通过ajax的方式,来判断他是否有打开权限,结果代码都可以正常运行的。但是第一次点击节点时ajax代码不运行,只有在第二次点击时才运行。这是怎么回事啊。
我是把你的代码注释后,在把我的ajax代码放入TView的onclick事件中的。
huangwenquan123 2012-02-14
  • 打赏
  • 举报
回复

<form id="form2" runat="server">
<asp:TreeView ID="TView" runat="server">
<Nodes>
<asp:TreeNode Text="FirstText" Value="FirstValue">
<asp:TreeNode Text="ThirdText" Value="ThirdValue">
<asp:TreeNode Text="FourText" Value="FourValue">
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="SecondText" Value="SecondValue">
</asp:TreeNode>
</Nodes>
</asp:TreeView>
<script type="text/javascript">
var reg = /javascript:__doPostBack\('[^']+','s?(?:[^\\]*\\\\)*([^']+)'\)/i;
var tv = document.getElementById("TView").getElementsByTagName("a");
for(var i=0;i<tv.length;i++){
if(!tv[i].getAttribute("onclick")){
tv[i].onclick=function(){
var temp = this.href;
this.href="javascript:void(0)";
var nt = this.parentNode.nextSibling.firstChild;
alert(reg.exec(nt.href)[1]+"=="+nt.innerHTML)
this.href=temp;
}
}
}
</script>
</form>

测试了下,没问题额,你js放在哪?不要放在Treeview的前面,你放在treeview的后面或者window.onload里。
上面把原本的默认href设为javascript:void(0),这里修改过来了,修改为原来的默认函数。
ksmark 2012-02-14
  • 打赏
  • 举报
回复
var tv = document.getElementById("TreeView1").getElementsByTagName("a"); 运行到这一步的时候出现下面的错误。
注:我把TreeView1改成了我自己控件的ID("TView")。
var tv = document.getElementById("TView").getElementsByTagName("a");

错误提示:
Microsoft JScript 运行时错误: 'document.getElementById(...)' 为空或不是对象
ksmark 2012-02-14
  • 打赏
  • 举报
回复
在js端控制treeview确实太困难了,最后我还是选择了在后台事件中做了。
不过就是treeview每次都要刷新。
没有办法,事件紧迫,这个礼拜要交东西,所以先把任务完成,以后再研究。
感谢楼上的兄弟。

等这个任务交掉,我还要研究的,可否加我为好友。57766476
huangwenquan123 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mark3798 的回复:]
还是不行,我把它放在form的onclick事件中,onclick ="test()"

还有,我不知道你说的 this.href="javascript:void(0)"; 改成自己的函数,不知道怎么改,我的节点上的连接都是在后台给添加的。不是在前台。

原本我是把您的代码房子TView的onclick事件中,结果就报错了,按照您说的放在它之后,也出现相同的错误。

另外我还想咨询一……
[/Quote]你帖你的代码上来看看。我这边测试没问题。或者你把上面单独放到页面中试试看。
huangwenquan123 2012-02-13
  • 打赏
  • 举报
回复
在ie6和ff3.6测试可以,你在其他浏览器测试看看,怕其中的parentNode nextSibling等有些空格的话不同浏览器获取到的不一样,不过Treeview系统自动生成那些html代码,估计是不会!

<form id="form1" runat="server">
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode Text="FirstText" Value="FirstValue">
<asp:TreeNode Text="ThirdText" Value="ThirdValue">
<asp:TreeNode Text="FourText" Value="FourValue">
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode Text="SecondText" Value="SecondValue">
</asp:TreeNode>
</Nodes>
</asp:TreeView>
<script type="text/javascript">
var reg = /javascript:__doPostBack\('[^']+','s?(?:[^\\]*\\\\)*([^']+)'\)/i;
var tv = document.getElementById("TreeView1").getElementsByTagName("a");
for(var i=0;i<tv.length;i++){
if(!tv[i].getAttribute("onclick")){
tv[i].onclick=function(){
this.href="javascript:void(0)";
var nt = this.parentNode.nextSibling.firstChild;
alert(reg.exec(nt.href)[1]+"=="+nt.innerHTML)
}
}
}
</script>
</form>
ksmark 2012-02-13
  • 打赏
  • 举报
回复
3楼:我想在前台使用啊。

2楼:在treeview中我没有用checkbox。直接前面就是 加号或者减号。
cheery_an 2012-02-13
  • 打赏
  • 举报
回复
TreeView1.Nodes[0].Value可以取到,但是只能在后台使用。
huangwenquan123 2012-02-13
  • 打赏
  • 举报
回复
<body>
<form id="form1" runat="server">
<asp:TreeView ID="TreeView1" runat="server">
<Nodes>
<asp:TreeNode ShowCheckBox="True" Text="FirstText" Value="FirstValue">
<asp:TreeNode ShowCheckBox="True" Text="ThirdText" Value="ThirdValue">
<asp:TreeNode ShowCheckBox="True" Text="FourText" Value="FourValue">
</asp:TreeNode>
</asp:TreeNode>
</asp:TreeNode>
<asp:TreeNode ShowCheckBox="True" Text="SecondText" Value="SecondValue">
</asp:TreeNode>
</Nodes>
</asp:TreeView>
<input id="Button1" type="button" value="button" />
<script type="text/javascript">
document.getElementById("Button1").onclick=function(){
var textArr = [],
valueArr = [];
var NP;
var reg = /javascript:__doPostBack\('[^']+','s?(?:[^\\]*\\\\)*([^']+)'\)/i;
var input = document.getElementsByTagName("input");
for(var i=0;i<input.length;i++){
if(input[i].type=="checkbox"&&input[i].checked){
textArr.push(input[i].title)
NP = input[i].nextSibling;
while(NP.tagName!="A"){
NP = NP.nextSibling;
}
valueArr.push(reg.exec(NP.href)[1])
}
}
alert(textArr)
alert(valueArr)
}
</script>
</form>
</body>
ksmark 2012-02-13
  • 打赏
  • 举报
回复
我打开有 treeview页面的html的源代码。
发现

只要不是最后一层节点,都是有 href="javascript:__doPostBack('TView','s\\200\\201')" 这样一句代码的


只要是最后一层节点就只有链接。 <a class="TView_0" href="jishu/Master/MstCASNO.aspx" target="Right" id="TViewt20">CASNOマスター</a> 像这样的代码。

所以当点击不是最后一层节点时都能跳出来类似 s\\200\\201 的字符串。

导致我还以为我能够取到每个节点的value值呢。

还是回到我的问题,我怎么取到节点中的value值呢?

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧