为什么我的代码在external.js文件中运行,但在HTML中运行

时间:2015-02-03 09:08:41

标签: javascript c# jquery asp.net

我试图从外部Javascript/jQuery文件中获取.js代码段。

在我的asp.net html页面底部的脚本标记内运行正常,但现在它在一个外部JS文件中运行。我已成功插入(动态)链接到外部文件(可在页面源中查看)并能够从其中激活弹出警报,因此我知道正在正确访问外部文件。我在外部文件之前也引用了JQuery,但以下脚本不会触发/运行?任何想法都会很棒,谢谢。

$("#<%=sDatepicker.ClientID%>").focus(function () {
  //$(this).blur();
  alert("Handler for .Datepicker called.");
});

正如您所看到的那样,我尝试使用Textbox访问ID=sDatepicker,但asp.net在其之前添加ClientID所以我需要找到它实际TextBox

我认为该网页可能尚未加载且TextBox控件可能不存在,因为外部JS文件位于我的文档的Head中,但我也尝试过添加

$('document').ready(function () { });

围绕JS文件中的脚本,但这似乎没什么帮助。

就像我说的那样,它在HTML页面中工作正常,但我只需要在某些情况下引用外部文件,因此需要在需要时动态地从我的C#代码中添加它。

欢呼声。

根据以下反馈更新可能的解决方案1。

我现在在我的外部JS文件中有以下内容:

$(document).ready(function () { keypadSuppress(); });

在我的.aspx HTML文件中,我有以下内容:

<script type="text/javascript">
    function keypadSuppress() {
            $("#<%=sDatepicker.ClientID%>").focus(function () {
                $(this).blur();
                alert("Handler for sDatepicker called.");
            });

            $("#<%=eDatepicker.ClientID%>").focus(function () {
                $(this).blur();
                alert("Handler for eDatepicker called.");
            });
    }
</script>

更新2

在上面的更新中尝试了上面的代码,今天工作正常(gremlins仍然要睡着了)。我做的唯一更改是向Document.ready函数添加一个警报,以便在访问它时进行标记,但这不是问题。上面的代码工作正常。

我需要做的另一件事就是在它周围添加一个<div>,我明白这是真的&#39;真的&#39;或者可见=&#39; false&#39;取决于我是否测试了移动设备,使用

后面的C#代码
bool IsMobile = Page.Request.Browser.IsMobileDevice;

谢谢,我们最终到达那里:)

1 个答案:

答案 0 :(得分:3)

当javascript在HTML中内联时,&lt;%=%&gt;标签由ASP.NET正确解析。当您将这个javascript逐字提取到外部文件中时,ASP.NET解析器将不会处理此文件,因此不会像Rory McCrossan所说的那样将id标记转换为正确的ID。

现在,一些可能的解决方案:

  • 您可以在外部javascript文件中定义一个函数,您可以在网页上的某些内联javascript中调用该函数。此内联JavaScript可以使用&lt;%=%&gt;标签,它们将被datepicker元素的id正确替换。
  • 您可以选择除服务器生成的ID以外的其他内容来正确识别您的日期选择器。考虑添加自定义css类,或自己选择ID。