1

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

我返回了一个 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 上我不需要刷新页面;它在第一次尝试时起作用。

请帮忙...

4

1 回答 1

0

$(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会阻止代码的执行。因此,您可以使用它来获取代码的伪堆栈跟踪。

于 2013-02-22T12:52:42.523 回答