未捕获的类型错误:无法读取未定义的属性“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;
    
)();

参考

$.browser on jQuery 1.9.x for legacy IE detection

【讨论】:

这很完美!但我认为这应该用作补丁,而不是解决方案,对吗? 哇,如果我能给你 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是:&lt;link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"&gt;&lt;script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"&gt;&lt;/script&gt;【参考方案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:未捕获的类型错误:无法读取未定义的属性“调用”

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

未捕获的类型错误:无法读取文本字段上未定义错误的属性“toLowerCase”