0

我正在尝试使用 datetimepicker 控件(http://timjames.me/jquery-ui-datetimepicker-plugin),但似乎我的本地 js 文件无法加载 - 但仅在 IE(版本 8.0.6)中有效在 Firefox 18.0 版中很好。

我使用以占位符“MainContent”命名的母版页,因此我的所有子页面控件都需要由 MainContent_ 引用,后跟控件的 ID。

母版页中的元素包含以下脚本,包括:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.16/jquery-ui.min.js"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.16/themes/hot-sneaks/jquery-ui.css" />
<script type="text/javascript" src="Scripts/jquery-ui-timepicker-addon.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        alert("hello");
        $('#MainContent_calStart').datetimepicker();
    });
</script>

script language="javascript" type="text/javascript">
    function GetItem(strName) {
        return document.all ? document.all[strName] : document.getElementById(strName);
    }

... etc etc etc

我的 asp.net 子页面包含代码:

基本上,托管 datetimepicker 的页面不是站点中加载的第一页,但由于包含脚本的母版页包含(并且无法全部加载),站点的第一页加载时出现 js 错误。

使用 IE 时,我无法将任何本地 JQuery 文件加载/包含到我的网站,因为我收到 Javascript 错误:

网页错误详情

用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;.NET CLR 2.0.50727;InfoPath.1;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729;.NET CLR 1.1。 4322;.NET4.0C;.NET4.0E) 时间戳:2013 年 1 月 15 日星期二 13:31:47 UTC

消息:语法错误行:3 字符:1 代码:0 URI:(本地主机上的页面路径)

该站点在 $('#MainContent_calStart').datetimepicker(); 出现错误“Microsoft JScript 运行时错误:对象不支持此属性或方法”,表明浏览器无法从包含文件中找到 datetimepicker 小部件的源/声明。如果我在出现 js 错误的情况下继续加载站点,则 datetimepicker 小部件会加载并且似乎功能齐全。

奇怪的是,如果我获取代码并在 VS2010 中创建一个示例网站项目,并包含上述文件/代码,则示例网站可以正常工作。示例和我的实时站点之间的唯一区别是实时站点中有额外的 pages/css/js 文件。这两个站点的结构在脚本位置/css 位置等方面是相同的。示例站点在 IE 和 FF 中都可以正常工作。

最后一件事,如果我将 jquery-ui-timepicker-addon.js 中的所有代码移动到母版页本身并排除 js 文件,则该站点可以正常工作。这表明在本地文件中未加载 js 代码这一事实。

任何帮助表示赞赏。干杯。

吉米

PS。我不能包含任何本地 js 文件,而不仅仅是有问题的文件。

4

2 回答 2

0

在你的母版页代码中试试这个

私人无效 AddScript(string src) { HtmlGenericControl genCtrl = new HtmlGenericControl(); genCtrl.TagName = "脚本"; genCtrl.Attributes.Add("type", "text/javascript"); genCtrl.Attributes.Add("语言", "javascript"); genCtrl.Attributes.Add("src", src); Page.Header.Controls.Add(genCtrl); }

protected void Page_Load(object sender, EventArgs e)
{ 
    // one minute prior to timeout (milliseconds)
    //timeout = (Session.Timeout * 60000) - 60000;
    Session.Timeout = 90000;

    AddScript(Page.ResolveUrl("~/Scripts/jquery-1.6.1.js"));
    AddScript(Page.ResolveUrl("~/Scripts/jquery-ui.min.js"));
    //AddScript(Page.ResolveUrl("~/Scripts/jquery-1.4.3.min.js"));
    //AddScript(Page.ResolveUrl("~/Scripts/jquery.tablesorter.min.js")); 
}

您将需要一个标头 runnat = server.

问题可能是您的 asp.net 网页不在母版页所在的根目录中,因此脚本的路径不正确。

如果您正在开发互联网站点,请使用 CDN 文件,因为它可以节省带宽 + 大量 CDN 文件由 CDN 网络预加载/缓存。

于 2013-01-15T13:46:11.520 回答
0

当我使用使用 indexOf 的插件(也在 jQuery 插件本身中)时,我在 IE8 中遇到了同样的错误(对象不支持此属性或方法)(http://www.w3schools.com/jsref/jsref_indexof.asp )。IE8 不知何故不支持此功能。我将此函数更改为 jQuery (http://api.jquery.com/jQuery.inArray/) 的 in.Array 函数,而且很愚蠢:这也使用了 indexOf。

为了解决这个问题,我将这个函数替换为一个搜索数组/字符串/...的 for 循环,这只是解决了我在 IE8 上的问题。

我希望它有帮助!

于 2013-01-15T13:46:46.153 回答