为什么jQuery.prototype($ .fn)修改在Internet Explorer 11中的事件处理程序中不起作用,直到刷新页面为止?

时间:2014-01-30 02:13:23

标签: javascript jquery internet-explorer

我遇到了几个jQuery插件的问题,这些插件添加到jQuery.prototype($ .fn),直到页面刷新后才在Internet Explorer 11中工作。我相信以下说明了问题的根源:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>foobar</title>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script>
$(function(){
    var outside_jQuery = jQuery();
    jQuery.prototype.foo = function(){};

    $('pre').append('foo in outside_jQuery on load? '
        + ('foo' in outside_jQuery).toString());

    $('input').on('click', function(){
        $('pre').append('\nfoo in outside_jQuery on click? '
            + ('foo' in outside_jQuery).toString());
        $('pre').append('\nfoo in jQuery() on click? '
            + ('foo' in jQuery()).toString());
    });
});
</script>
</head>
<body>
<input type="button" value="foo?" />
<pre></pre>
</body>
</html>

在Firefox 26中,单击按钮后输出如下所示:

  在load_jQuery上加载

foo?真正
  在click_jQuery点击foo?真正
  点击jQuery()中的foo?真的

在Internet Explorer 11中,单击按钮后输出如下:

  在load_jQuery上加载

foo?真正
  在click_jQuery点击foo?真正
  点击jQuery()中的foo?假

但是,刷新页面一次后,它会按预期工作。

似乎jQuery.prototype的更改未反映在事件处理程序中创建的新jQuery对象中,直到页面刷新之后。为什么呢?

0 个答案:

没有答案