【问题标题】:jQuery does not work in IE9 in first attemp; on pressing F5 (refresh) it worksjQuery 在第一次尝试时在 IE9 中不起作用;按 F5 (刷新)它可以工作
【发布时间】:2013-02-08 01:28:40
【问题描述】:

(我已经问过这个问题了;这里我添加更多细节)

我返回了一个 jQuery,它在更改事件时返回输入元素中输入的文本。此 jQuery 在 FireFox 中运行良好,但在 Internet Explorer (IE9) 中失败。

  <script>
      $(document).ready(function () {
          $("#UserName").change(function () {
              alert("Text Entered Is :"+$("#UserName").val());
          });
      });
  </script>

1) 我正在使用 ASP.NET MVC;要到达具有上述 jquery 的页面,我正在使用 Html.ActionLink

2) 在 IE 上,当我到达上面 jQuery 的页面时,它不起作用;但是当我按 F5 并刷新页面时它可以工作。

3) 在 Firefox 上我不需要刷新页面;它在第一次尝试时就起作用了。

请帮忙...

【问题讨论】:

  • 您确定没有缓存页面的上一个版本吗?什么版本的jquery?这段代码看起来是正确的
  • 这段代码不正确,文档就绪不应该与jQuery Mobile一起使用,有时文档就绪可以在页面创建之前触发并且不会绑定他的大小写更改事件。看看我的其他答案以获得更好的理解:stackoverflow.com/a/14469041/1848600
  • @Gajotres 我没有看到 NewToAspMVC 提到任何关于 JQueryMobile 的内容。
  • 用过的标签呢?

标签: asp.net-mvc internet-explorer jquery-mobile


【解决方案1】:

$(document).ready() 事件依赖于一个名为 DOMContentLoaded 的事件(在 Chrome 中,不太确定 firefox,但它以某种名称存在)。

一旦加载了 HTML 并引入了所有相关文件(CSS 和 JS 文件),就会触发此事件。Chrome、Safari (WebKit) 和 Firefox( Gecko)在触发这个特定事件时非常可预测。它像发条一样在堆栈中冒泡,一旦被抓住,你就可以摆弄它,因为所有人都在乎。

但是,就 IE 而言,直到第 7 版(我认为)他们从未实现过此事件。鉴于此,最近版本的实现也没有那么高效。

我一次又一次遇到这个问题。

每次都有效的解决方法是在 HTML 末尾手动触发事件:

<script type="text/javascript">
try{jQuery.ready();}catch(e){}
</script>

希望对你有帮助

编辑
查看事件是否被触发的一个好方法是在代码中添加某种动作。类似的东西:

<script>
      $(document).ready(function () {
          alert("Loaded");
          $("#UserName").change(function () {
              alert("Text Entered Is :"+$("#UserName").val());
          });
      });
</script>
由于 Javascript 的单线程特性,

alert 会阻止代码的执行。因此,您可以使用它来获取代码的伪堆栈跟踪。

【讨论】:

  • 当我使用 F5 重新加载页面时工作;但是当我从某个链接到达该页面时,它不起作用。
猜你喜欢
  • 2016-10-17
  • 2011-01-01
  • 2022-07-20
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多