【问题标题】:Uncaught TypeError: Cannot read property 'msie' of undefined - jQuery tools未捕获的类型错误:无法读取未定义的属性“msie” - jQuery 工具
【发布时间】: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 工具,过去几年它一直没有开发人员。

标签: javascript jquery jquery-tools


【解决方案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是:&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)并且您在其他地方定义它。

              【讨论】:

                猜你喜欢
                • 2016-09-27
                • 2015-08-01
                • 2013-01-25
                • 1970-01-01
                • 2023-04-01
                • 2020-12-15
                • 2017-10-20
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多