【问题标题】:prevent href=# with jquery jump to top防止 href=# 使用 jquery 跳转到顶部
【发布时间】:2013-02-22 15:32:20
【问题描述】:

对不起..我遇到了几十个这样的问题,但似乎没有一个对我有帮助:(

我正在使用切换脚本,但每次我点击脚本链接时它都会切换,但它也会跳转到页面顶部!有任何想法吗?这是代码:

<a href="" id="button2">Read More…<a>
<div id="hidden_content2" style="display:none;">
<p>bla bla</p>
</style>
</div>
<script>
$(document).ready(function() {
   $("#button2").toggle(
      function() {
         $(this).text('Hide Content…');
      },
      function() {
         $(this).text('Read More…');
      }
   ).click(
      function() {
         $("#hidden_content2").slideToggle("slow"…
      }
   );
});
</script>

【问题讨论】:

    标签: jquery javascript-events


    【解决方案1】:

    return false 来自您的点击处理函数。这可以防止链接的默认行为。


    您的点击处理程序中还有一个错字:

    $("#hidden_content2").slideToggle("slow"…
    

    应该是:

    $("#hidden_content2").slideToggle("slow");
    

    这将破坏您的处理程序(包括return false),直到修复为止。

    【讨论】:

    • 谢谢,但没有任何效果!我不知道该怎么办!!!!我正在使用来自主题森林的级联 html 模板
    • “没有任何效果”根本不是一个有用的说法。请向我们提供您的调试和分析结果。
    • 我已经尝试了回复中给出的每一个解决方案,但它一直跳到顶部。即使我删除了 href=""
    【解决方案2】:

    阻止事件的默认动作。注意toggle事件方法已被弃用,你可以使用text方法的回调函数代替。

    $(document).ready(function () {
        $("#button2").click(function (event) {
            event.preventDefault();
            $(this).text(function (i, text) {
                return text == 'Hide Content…' ? 'Read More…' : 'Hide Content…'
            });
            $("#hidden_content2").stop().slideToggle("slow");
        });
    })
    

    【讨论】:

    • 谢谢,但没有任何效果!我不知道该怎么办!!!!我正在使用来自主题森林的级联 html 模板
    【解决方案3】:

    使用:JavaScript:void(0); in href

    <a href="jJavaScript:void(0);" id="button2">Read More…<a>
    <div id="hidden_content2" style="display:none;">
    <p>bla bla</p>
    </style>
    </div>
    <script>
    $(document).ready(function() {
    $("#button2").toggle(function() {
    $(this).text('Hide Content…');
    }, function() {
    $(this).text('Read More…');
    }).click(function(){
    $("#hidden_content2").slideToggle("slow"…
    });
    });
    

    【讨论】:

    【解决方案4】:

    您可以在点击时使用 event.preventDefault()。

    http://api.jquery.com/event.preventDefault/

    我觉得现在jQuery中的click方法应该换成on了。

    【讨论】:

      【解决方案5】:

      你可以使用preventDefault,例如:

      .click(function(e){
          e.preventDefault();
          $("#hidden_content2").slideToggle("slow"…
      });
      

      或者,您也可以只使用 span 或 div 代替锚标记,并为其分配 click() 事件,因为您似乎实际上不需要使用锚标记。

      【讨论】:

      • 即使我删除了 href=""
      • 你能举一个 jsfiddle 例子来说明正在发生的事情吗?
      • 这很奇怪。当我将代码放在jsfiddle(jsfiddle.net/ZV7fD)或简单的alnoe html上时,脚本不起作用,但是当我在themeforest的级联模板中打开它时,它确实会跳转到顶部问题
      • 你能发布一个链接到它不起作用吗?这应该会给人们更多的信息来帮助你。
      【解决方案6】:

      首先,您为什么要使用锚链接。它没有链接到任何东西,所以它应该是一个链接吗?您不能只使用普通的 div 并使用 CSS 将光标设置为指针吗?如果这样做,则无需阻止单击空链接的默认行为。

      如果你保留链接,你有两个选择。

      $('#button2').toggle(function(event) {
         event.preventDefault(); 
      });
      

      $('#button2').toggle(function() {
          return false;
      });
      

      【讨论】:

      • 即使我删除了 href=""
      【解决方案7】:

      使用它:
      只是对代码进行一点更新

      <a href="#" id="button2">Read More…<a>
      
      <div id="hidden_content2" style="display:none;">
          <p>bla bla</p>
      </div>
      
      <script type="text/javascript">
      $(document).ready(function() {
      
          $("#button2").toggle(function() {
      
              $(this).text('Hide Content…');
      
              }, function() {
      
                  $(this).text('Read More…');
      
          }).click(function(){
      
              $("#hidden_content2").slideToggle("slow");
              return false;
      
          });
      
      });
      </script>
      

      【讨论】:

      • 不起作用..“阅读更多”在页面加载时显示一秒钟,然后消失
      猜你喜欢
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多