【问题标题】:Link within div is not clickable when Jquery hide() and show() are used on containing div当 Jquery hide() 和 show() 用于包含 div 时,div 内的链接不可点击
【发布时间】:2012-08-15 15:15:26
【问题描述】:

我的页面上 div 内的链接有问题。目前,当点击链接时,没有任何反应。我不明白为什么,但我想这与在包含的 div 上使用 hide() 和 show() 有关,我将在下面解释。

div 是自定义“手风琴”的一部分,它使用以下 Jquery 在单击标题时打开/关闭正确的 div:

   $('.accordion .head').click(function () {
     $('.accordion .head').next().hide();
     $('.accordion .head').removeClass("active");

     $(this).next().show('fast');
     $(this).addClass("active");
     return false;
});

我知道有更好的方法来实现“手风琴”行为,但是因为我们的网站都使用了这种方法,所以我没有选择更新手风琴来使用实际的 Jquery 手风琴()方法而不做很多为自己做额外的工作。

那么,鉴于下面的示例代码,任何人都可以帮助我理解这里的问题是什么,或者如何克服它?

<div class="accordion">
  <div class="head active"><a href="#">Heading 1</a></div>
  <div class="accordion-content first">
      <p>
           Some text here
      </p>
      <div class="accordion-logos"> 
      </div>
  </div>            
  <div class="head"><a href="#">Heading 2</a></div>
  <div class="accordion-content">
      <p>
          Some other text here 
      </p>
      <p>
          <a href="http://www.google.com">http://www.google.com</a>                                    
      </p>
  </div>            
</div>

当我专门处理它时,我什至无法获得点击注册,当点击链接时,下面代码中的警报永远不会触发:

  $('.accordion .accordion-content #thelink').click(function () {
    alert();
  });

谢谢,

玫瑰

【问题讨论】:

  • this JSfiddle example 使用您提供的代码不会阻止 google 链接触发,这让我相信肯定有其他 Javascript 劫持了您提供的点击事件
  • 嗨,西蒙,感谢您对此的帮助。我查看了 JSfiddle 示例,我可以看到您是对的,除非有其他一些 javascript 阻止该链接,否则该链接应该可以工作。我将不得不一次关闭一个脚本,直到我能找出原因。感谢您抽出宝贵时间查看此内容!
  • @LRose:我编辑了我的答案,现在我正确理解了问题,并就如何查明可能出现的问题提出了一些建议。

标签: jquery hyperlink show-hide clickable


【解决方案1】:

我遇到了链接不可点击的问题,我偶然发现了这篇文章并试图找到答案。问题是,在我的标题下方的 div 元素上触发 jquery hide() 后,我的标题中的链接不可点击。我将代码更改为 slideUp() 而不是 hide() 并且链接是可点击的。我不确定这是否能解决你在这篇文章中指定的问题,但鉴于它是相关的,我想我会分享它,因为它可能会帮助遇到这篇文章的任何人。它不像 .hide() 那样合适,而是一个可用的解决方法。

$('#mydiv').slideUp();

【讨论】:

    【解决方案2】:

    似乎我第一次误解了你。

    如果 google 链接没有触发,那么要么是有东西阻止了链接,覆盖了链接的 href,或者甚至有另一个元素在它前面,你不能点击链接。

    如果有人想阻止链接工作,他们可以这样做:

    $('.accordion .accordion-content a').click(function(){
        return false;
    });
    

    如果您想检查是否是这种情况,您可以尝试取消绑定所有内容,然后检查您是否可以点击链接:

    $('.accordion .accordion-content a').unbind('click');
    

    同时检查您的 html 输出以查看 href 值设置为什么,也许有人已经覆盖了它。

    只需转到呈现的页面并右键单击并选择查看源。搜索 google 链接并检查 href 值。

    【讨论】:

    • 嗨弗朗索瓦,你是对的,在我发布之前,我不小心删除了链接上的 ID。我尝试了您提供的两个选项,即使它显然应该根据您提供的演示工作,但我仍然没有在实际页面上收到警报。我真的开始认为页面上的另一个脚本在这里引起了问题。非常感谢您对此进行审核!
    • @LRose:我现在更新了我的答案。我最初误解了你的问题。我添加了一些关于如何帮助您解决为什么链接不允许您单击它的建议。我假设我们正在谈论您无法触发 google 链接:)
    • 嗨弗朗索瓦,再次感谢您在这里的帮助,这太神秘了!我尝试了您提供的第二个 sn-p 但链接仍然不可点击,我还查看了呈现的页面内容并且 href 值已完成。如果您提到页面上的另一个元素可能会阻止单击链接,我认为您可能有一些问题。我将不得不挖掘页面上所有元素的 css 以查看是否有可以做到这一点的东西。再次感谢您的所有帮助!
    【解决方案3】:

    您为什么使用#thelink?如果我只是用a 替换它,它就可以工作。

    $(function(){
       $('.accordion .head').click(function () {
        $('.accordion .head').next().hide();
        $('.accordion .head').removeClass("active");
    
        $(this).next().show('fast');
        $(this).addClass("active");
        return false;
      });
    
      $('.accordion .accordion-content a').click(function () {
       alert();
      });
    })
    

    【讨论】:

    • 嗨 EH_warch,我使用 id 只是因为我已经测试过选择 div 中的任何链接。我确信这会比使用特定 id 更好,因为我可以自定义函数以适用于任何链接。感谢您查看我的问题!
    • 井 id 对页面来说是唯一的,因此您无需使用“class id”类型的选择器。我建议你使用锚选择器,因为你的 HTML 上没有 id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多