选项卡结构在 jquery 2.1.3 中工作,在 3.6.0 中显示错误

Posted

技术标签:

【中文标题】选项卡结构在 jquery 2.1.3 中工作,在 3.6.0 中显示错误【英文标题】:Tabs structure working in jquery 2.1.3, showing error in 3.6.0 【发布时间】:2021-09-08 08:40:38 【问题描述】:

未捕获的错误:语法错误,无法识别的表达式:[href=#technical]

tabs.js 文件

$(function() 
    var tab = $('.tab a'),
        content = $('.tab-content');
    if ( location.hash )
        tab.filter('[href='+location.hash+']').addClass('active');
        content.hide().filter(location.hash).show().fadeIn();
       else       
        tab.filter(':first').addClass('active');
        content.filter(':not(:first)').hide();
    
    tab.click(function()
        if( location.hash )
            var id = location.hash;
           else    
            var id = $(this).attr('href');
        
        tab.removeClass('active').filter('[href='+id+']').addClass('active');
        content.hide().filter(id).show();
    );
    $(window).bind('hashchange', function()
        tab.trigger('click');
    );
);

tabs.php 文件

<div class="tab">
    <a href="#overview">Overview</a>
    <a href="#features">Features</a>
    <a href="#articles">Articles</a>
    <a href="#technical">Technical</a>
</div>


    <div id="overview"  class="tab-content">
    <p>echo..</p>
    </div>
    <div id="features"  class="tab-content">
    <p>echo..</p>
    </div>  
    <div id="articles"  class="tab-content">
    <p>echo..</p>
    </div>       
    <div id="technical" class="tab-content">
    <p>echo..</p>
    </div>

为什么我会遇到这样的问题?当我激活旧版本时它可以工作,但是当我尝试更新时出现问题。谢谢你

【问题讨论】:

您需要将属性值用引号引起来,因为它包含# 字符。 【参考方案1】:

似乎存在报价问题。你有:

tab.removeClass('active').filter('[href='+id+']').addClass('active');

所以选择器变成:

[href=#overview]

我相信您想将选择器更正为以下内容:

[href='#overview']

考虑以下内容。

$(function() 
  var tab = $('.tab a'),
    content = $('.tab-content');
  if (location.hash) 
    tab.filter("[href='" + location.hash + "']").addClass('active');
    content.hide().filter(location.hash).show().fadeIn();
   else 
    tab.filter(':first').addClass('active');
    content.filter(':not(:first)').hide();
  
  tab.click(function() 
    if (location.hash) 
      var id = location.hash;
     else 
      var id = $(this).attr('href');
    
    tab.removeClass('active').filter("[href='" + id + "']").addClass('active');
    content.hide().filter(id).show();
  );
  $(window).on('hashchange', function() 
    tab.trigger('click');
  );
);
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<div class="tab">
  <a href="#overview">Overview</a>
  <a href="#features">Features</a>
  <a href="#articles">Articles</a>
  <a href="#technical">Technical</a>
</div>


<div id="overview" class="tab-content">
  <p>echo..</p>
</div>
<div id="features" class="tab-content">
  <p>echo..</p>
</div>
<div id="articles" class="tab-content">
  <p>echo..</p>
</div>
<div id="technical" class="tab-content">
  <p>echo..</p>
</div>

这不会产生您报告的错误。

【讨论】:

【参考方案2】:

Jquery 3.0 已弃用绑定函数

  // your code 

    $(window).bind('hashchange', function()
        tab.trigger('click');
    );

   // change to 
    $(window).on('hashchange', function()
        tab.trigger('click');
    );

【讨论】:

以上是关于选项卡结构在 jquery 2.1.3 中工作,在 3.6.0 中显示错误的主要内容,如果未能解决你的问题,请参考以下文章

Django,Javascript:通过 javascript innerHtml 注入 DOM 的表单在提交时崩溃 google chrome 选项卡。在 IE 中工作

单击事件选项不在safari中工作

Phpmyadmin 停止在 ubuntu 中工作

jquery 不在部署中工作,但在本地 nuxtjs 中工作?

Jquery 表单提交不能在 chrome 中工作,但在 Firefox 中工作

为啥这个 jQuery AJAX PUT 可以在 Chrome 中工作,但不能在 FF 中工作