我遇到了几个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对象中,直到页面刷新之后。为什么呢?