我遇到了一个没有在asp用户控件中加载jquery的问题。
我想在单击复选框时添加click事件。
这是我的javascript文件
$(document).ready(function() {
var arr = jQuery(":checkbox[id*='drpAccountType']");
for (i = 0; i < arr.length; i += 1) {
$("#" + arr[i].id).click(function() { alert(this.id) });
}
});
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
用户控制预渲染事件:
Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
ScriptManager.RegisterClientScriptInclude(Me, Me.GetType, "CheckboxdropdownScript", ResolveUrl("~/Scripts/CheckBoxDropDown.js"))
End Sub
脚本加载正常,但jQuery的任何使用都返回undefined。然后只有在加载页面时,我才能在firebug中为commande行执行相同的代码。 jquery库加载在母版页中。
每当我在asp用户控件中使用jquery时,我总会发现问题,而且我总是不得不破解它才能使它工作。我尝试了stackoverflow中的所有条目,但我从来没有找到一个作为一般解决方案。
是否有人找到了一个简单的解决方案,将jquery与主页,asp.net中的用户控件一起使用 如果有人可以分享这些有价值的信息,我将不胜感激。
我的经理即将从应用程序中删除jquery,因为我们总是花费大量时间来找到解决方法以使其与用户控件一起使用。
请帮助,我喜欢jquery,我真的想将它用于客户端脚本。
最好的问候
答案 0 :(得分:5)
您的脚本可能会在jquery库之前插入页面。 (您可以通过检查页面的HTML输出来验证这一点。)
当脚本文件执行JS内联时,特别是当JS依赖于其他库时,使用RegisterStartupScript
而不是RegisterClientScriptInclude
是最安全的。如果使用this overload of RegisterStartupScript,则可以构造对同一外部JS文件的引用,它将在正确的位置运行。
作为替代方案,您可以在用户控件中的<asp:ScriptReference/>
中使用ScriptManagerProxy
标记,而不是在Page_Load或Page_Init中注册脚本;根据我的经验,这些脚本是在母版页的脚本之后添加的。
答案 1 :(得分:1)
这不是一个直接的答案,但这里有一些可能有帮助的jQuery ASP.net控件:
http://clipperhouse.com/jQuery/
(请查看有关回调的内容。)
此外,如果您只是为所有复选框指定一个类名并将其用作选择器,则可能不需要“for”循环。