我在从asp.net树节点控件调用jquery函数时遇到了问题。下面是aspx文件中的treenode代码。我使用的方法是在"navigateUrl“属性中放入一个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内容会如期加载到mainContentContainer目录中。
然而,在Internet Explorer (v8和9)中,它只是打开另一个浏览器窗口,并尝试加载JavaScript链接,就像它是一个URL一样。由于某些原因,地址栏只显示链接的这一部分:"javascript:$('“,内容窗口显示此错误"Internet Explorer无法显示网页”
我已经搜索过这个问题,我找到的所有解决方案都建议使用"OnClick“属性进行目标调用,或者将”element“的”JavaScript“属性设置为"_self”
这两个选项对我都不起作用。我不能为标记赋予"OnClick“属性,因为它不是此asp.net控件的有效属性。
类型'System.Web.UI.WebControls.TreeNode‘没有名为'onclick’的公共属性是出现在浏览器中的错误(作为标准.net错误网页返回)
我尝试了target=的“_self”选项,唯一的变化不是打开一个新的浏览器窗口,而是打开一个错误。当前浏览器将只显示对象对象,而不会在地址栏中进行任何更改。
我读到的另一个解决方案是将"retun false“放在javascript调用之后,但这会给出一个”函数外的返回语句“javascript错误。
如果有从asp.net树节点控件调用jquery.load的解决方案,请告诉我。
发布于 2012-01-27 21:00:40
您可以考虑以下解决方案,即在加载文档或呈现树之后使用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) { ... });
https://stackoverflow.com/questions/9033195
复制相似问题