未捕获的类型错误:无法读取未定义的属性“msie” - jQuery 工具
Posted
技术标签:
【中文标题】未捕获的类型错误:无法读取未定义的属性“msie” - jQuery 工具【英文标题】:Uncaught TypeError: Cannot read property 'msie' of undefined - jQuery tools 【发布时间】:2013-02-02 02:47:23 【问题描述】:我在 Chrome 开发控制台中收到以下错误:
Uncaught TypeError: Cannot read property 'msie' of undefined
我的理解是,这是因为 .browser
现在在 jQuery 中已弃用,但是我使用的是最新版本的 jQuery 工具,但它仍然给出错误,我检查了 js
文件,它就在那里。
我怎样才能解决这个问题,以免它给出错误?
【问题讨论】:
这个错误是不够的。您试图从哪个元素读取此内容? 我的代码中根本没有使用.browser
。它似乎在 jQuery 工具文件中检测到它。
browser
对象不仅在 1.9 中已弃用,而且已消失。如果 jQuery Tools 还在使用它,那么 jQuery Tools 就坏了。
@Alexander 似乎摆脱了错误。如果您愿意,可以提出答案。
最新的 jQuery 工具只在 jQuery 1.7 上测试过。 jQuery 1.9 与最新版本的 jQuery Tools 不兼容;就这么简单。转储 jQuery 工具或将 jQuery 降级到 1.9 以下的任何可用版本。否则,不要指望任何人更新 jQuery 工具,过去几年它一直没有开发人员。
【参考方案1】:
您可以查看 AJ 提供的此解决方案。这很简单,只需复制并粘贴以下代码行即可。
jQuery.browser = ;
(function ()
jQuery.browser.msie = false;
jQuery.browser.version = 0;
if (navigator.userAgent.match(/MSIE ([0-9]+)\./))
jQuery.browser.msie = true;
jQuery.browser.version = RegExp.$1;
)();
参考:
【讨论】:
这很完美!但我认为这应该用作补丁,而不是解决方案,对吗? 哇,如果我能给你 10 个优点,我现在就去做。 这个答案不再正确,因为 IE11 在userAgent
字符串中没有 MSIE 令牌。
正如@DaveMethvin 所提到的,它在 IE11 中不起作用.. 这个问题有什么解决方案吗?
我放了这段代码,但它不适用于 Chrome 浏览器!【参考方案2】:
自 jQuery 1.9 起,$.browser
方法已被删除。
jQuery.browser() removed
jQuery.browser()
方法自 jQuery 1.3 起已被弃用,并在 1.9 中被删除。 如果需要,它可以作为 jQuery Migrate 插件的一部分使用。我们建议将特征检测与 Modernizr 等库一起使用。——jQuery Core 1.9 Upgrade Guide.
如升级指南中所述,您可以尝试使用jQuery Migrate plugin 来恢复此功能并让 jQuery 工具正常工作。
【讨论】:
【参考方案3】:在您的 jsp/js 文件中使用以下脚本标记:
<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>
这肯定会奏效。
【讨论】:
确保您的互联网连接正常。如果您是离线使用,请下载您最后的 js 文件,然后引用该文件。 好吧,我可以看到它是在线托管的......无论如何,谢谢我用 jquery.noConflict() 解决了它,因为我在同一页面上使用了 jquery 的两个版本。 @User5590 : 随时:) 不应在生产中使用非缩小的 jquery:例如检查 cdnjs.com。并改用 HTTPS。【参考方案4】:我在 js 文件包含后使用下面的代码,它现在可以工作了。
<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
jQuery.browser = ;
(function ()
jQuery.browser.msie = false;
jQuery.browser.version = 0;
if (navigator.userAgent.match(/MSIE ([0-9]+)\./))
jQuery.browser.msie = true;
jQuery.browser.version = RegExp.$1;
)();
</script>
【讨论】:
这个链接 link 给了我错误,但是你写的这段小代码对我帮助很大,谢谢。【参考方案5】:我只是添加了
jQuery.browser =
msie: false,
version: 0
;
在jquery脚本之后,因为我不再关心IE了。
【讨论】:
谢谢兄弟。我遇到了此类错误并解决了您的解决方案提供的问题。【参考方案6】:Here is the jQuery Tools bug on GitHub。您可以尝试其中一个补丁。
edit — 在我看来,jQuery 工具并没有得到太多支持。除非我准备好自己接管支持,否则我个人不会开始依赖该库的新项目。
【讨论】:
+1,jQuery 工具在过去几年里一直一团糟。它没有“得到太多支持”是非常准确和轻描淡写的。我认为自 jQuery 1.3 以来只有一次小更新,过去几年也没有开发人员。 同意,有人推荐更换库吗?带有滚动条、覆盖和范围输入滑块的东西?我避免使用 jQuery mobile,因为它是预先设置好的。我以前设计过它,这是一场噩梦。 我已经开始为我想要的每个函数找到编写良好的最小库。即:范围输入滑块:loopj.com/jquery-simple-slider,滚动条/滑块:bxslider.com。我发现更好的支持和总体上更小的足迹找到像这样的单个库【参考方案7】:因为我根本不打算支持旧的 MS IE 版本,所以我简单地将所有对 browser.msie
的引用替换为 false
。
我知道,这不是一个好的解决方案,但它对我有用。
(实际上,它们显示为!browser.msie
,可以从条件中省略。)
【讨论】:
【参考方案8】:用
替换你的JS<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
来源link
【讨论】:
目前jquery 1.7+最新的jquery-ui是:<link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
【参考方案9】:
看到这个问题主要是由于浏览器导航和版本属性引起的。 为此,您必须在函数中添加以下代码:
/* solution to undefined msie */
jQuery.browser = ;
jQuery.browser.msie = false;
jQuery.browser.version = 0;
if (navigator.userAgent.match(/MSIE ([0-9]+)\./))
jQuery.browser.msie = true;
jQuery.browser.version = RegExp.$1;
/* solution to undefined msie */
例如,我在点击功能上使用它,请参阅:
$(document).on('click', '.remove_add_test', function()
var product_id = $(this).data('id');
var thisproduct = $(this);
/* solution to undefined msie */
jQuery.browser = ;
jQuery.browser.msie = false;
jQuery.browser.version = 0;
if (navigator.userAgent.match(/MSIE ([0-9]+)\./))
jQuery.browser.msie = true;
jQuery.browser.version = RegExp.$1;
/* solution to undefined msie */
jConfirm('Are you sure you want to delete record?', 'Remove Product', function(r)
if (r == true)
$.ajax(
type: 'POST',
url: 'scripts/ajax/index.php',
data:
method: 'removeproduct_fromcart',
id: product_id
,
dataType: 'json',
success: function(data)
if (data.RESULT == 0)
$(".price span").text(data.totalprice);
$(thisproduct).closest('tr').remove();
$(".cart-number").text(data.productcount - 1);
$.growl.notice(
title: "Shopping Cart",
message: data.MSG
);
location.reload();
// window.location.href = 'https://www.youth-revisited.co.uk/payment.html';
// window.location.href = 'https://www.youth-revisited.co.uk/payment.html';
);
// window.location.href = 'https://www.youth-revisited.co.uk/payment.html';
else
return false;
);
);
【讨论】:
【参考方案10】:像打击一样使用
$(function (a)
。 . . . .then 在你的函数中你可以使用 msie 属性,比如
if (a.browser.msie)
else
$(settings.current).after(Uploadelement);
祝你好运
【讨论】:
【参考方案11】:像打击一样使用
我用这个命令解决
“Uncaught TypeError: Cannot read property 'msie' of undefined”错误
if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery))
return;
【讨论】:
【参考方案12】:我在使用 JQuery 1.10 和 JQuery UI 1.8 时遇到此错误。我能够通过更新到最新的 JQuery UI 1.11.4 来解决这个错误。
从 Visual Studio 更新 JQuery UI 的步骤:
导航到项目或解决方案 右键单击:“管理 NuGet 包” 在左侧,单击“已安装的软件包”选项卡 查找“JQuery UI(组合库)”并点击更新 如果找到,选择它并单击更新 如果找不到,请在左侧的“在线> nuget.org”选项卡中找到它,然后单击安装。如果 Jquery UI 版本老版本还存在,可以从项目中删除【讨论】:
【参考方案13】:如果您定义了两次 jQuery,那么您可能会收到此错误。例如,如果您正在使用 Primefaces(它已经包含 jQuery)并且您在其他地方定义它。
【讨论】:
以上是关于未捕获的类型错误:无法读取未定义的属性“msie” - jQuery 工具的主要内容,如果未能解决你的问题,请参考以下文章
错误:`未捕获(承诺中)类型错误:无法读取未定义的属性'doc'`
未捕获的类型错误:无法读取未定义的属性 toLowerCase
JQuery:未捕获的类型错误:无法读取未定义的属性“调用”