我在从asp.net树节点控件调用jquery函数时遇到问题。这是aspx文件中的树节点代码。我使用的方法是在"navigationUrl"属性中放置一个javascript链接。
以下是代码:
<asp:TreeNode Value="Level1"
NavigateUrl="javascript:$('#mainContentContainer').load('report.aspx?level=1');"
Text="Level 1"
Target="Content"
expanded="false">
这在CHROME中非常有效。当我单击树节点"Level 1"时,report.aspx内容会按预期加载到mainContentContainerdiv中。
然而,在InternetExplorer(v8和9)中,它只是打开另一个浏览器窗口,并尝试加载JavaScript链接,就好像它是一个URL一样。由于某种原因,地址栏只显示链接的这一部分:"javascript:$('",内容窗口给出了"Internet Explorer无法显示网页"
我已经搜索了这个问题,我找到的所有解决方案都建议使用"OnClick"属性进行JavaScript调用,或者将"element"的"target"属性设置为"_self"
这两个选项对我都不起作用。我不能给标签一个"OnClick"属性,因为它不是这个asp.net控件的有效属性。
类型"System.Web.UI.WebControls.TreeNode"没有名为"onclick"的公共属性是出现在浏览器中的错误(作为标准.net错误网页返回)
我尝试了target="_self"选项,唯一的改变是打开一个错误的新浏览器窗口。当前浏览器将只显示[对象对象],地址栏中没有任何更改。
我读到的另一个解决方案是在javascript调用后加上"retunfalse",但这会导致"函数外的返回语句"javascript错误。
请告诉我是否有从asp.net树节点控件调用jquery.load的解决方案。
您可以考虑以下解决方案,即在加载文档后或在呈现树后使用jQuery来绑定点击事件处理程序。因此,您只使用报告的实际url,而不是NavigateUrl
属性中的javascript:
。
<asp:TreeNode Value="Level1"
NavigateUrl="report.aspx?level=1"
Text="Level 1"
Target="Content"
Expanded="false">
通常情况下,这会导致导航离开页面并转到报告页面。但我们可以使用以下jQuery代码将点击事件处理程序添加到链接中来防止这种情况:
$("#tree a").click(function(e) {
// Get the url (report.aspx?level=...)
var url = $(this).attr("href");
// Load the report
$('#mainContentContainer').load(url);
// Don't navigate away
e.preventDefault();
});
您可能需要使用一个更具体的选择器,才能将此单击处理程序仅添加到树中某一级别的节点中。在这种情况下,您可以使用LevelStyles
为这些节点提供一个类,然后在jQuery:中使用不同的选择器
<div id="tree">
<asp:TreeView runat="server">
<LevelStyles>
<!-- Add class report only to nodes at the first level -->
<asp:TreeNodeStyle CssClass="report"/>
</LevelStyles>
...
</asp:treeView>
</div>
现在您的jQuery选择器将是:
$("#tree .report a").click(function(e) { ... });