【问题标题】:event.preventDefault not working. Ajax call causing this?event.preventDefault 不起作用。 Ajax 调用导致这个?
【发布时间】:2012-04-23 23:30:10
【问题描述】:

我正在尝试使用 scrolltop 方法,但 event.preventDefault 无法正常工作。 我遇到的是页面先向上滚动然后向下滚动。 似乎 onclick 会导致页面重新提交什么的......(ajax post??)

我有以下代码

按钮(触发器)

 <a id="nextset" class='nextbtn' >Next Step</a>

事件

jQuery('#nextset').click(function (event) {
                event.preventDefault();
                movenext('set');
                jQuery('html,body').animate({ scrollTop: $('#subtitles').offset().top }, 2000);
            });

功能

    function getfav(obj) {
            var myParams = "{ 'proattr':'" + obj + "'}";
            jQuery.ajax({
                type: "POST",
                url: "project.aspx/getproject",
                data: myParams,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                beforeSend: function () { jQuery('#wait').show(); },
                complete: function () { jQuery('#wait').hide(); },
                success: function (msg) {
                    GetProjectPic(msg.d, obj); //creates DOM and insert in div
                    Initbtns();// dynamic btns initialization
                }
            });
        }

  function movenext(obj) {
            //other codes to hide/show DOM
            getfav(nextobj); 
        }

如果我添加返回错误;在 onclick 事件中,按钮不起作用。

知道是什么导致滚动到顶部吗?

更新:

这是由 movenext 函数内部的代码块引起的。

jQuery('[id^="favdiv"]').empty(); 

与 event.preventDefault 无关。

奇怪的是,屏幕滚动比隐藏的 div 高度(“favdiv”)多得多,这会导致屏幕上下效果。我不知道如何防止它......

更新2

我搜索了jquery空方法,发现了这个。

jquery "empty" changes the scrollbar

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可以通过使用以下 sn-p 来避免默认行为:

    <a id="nextset" class="nextbtn" href="javascript:void(0);">Next Step</a>
    

    【讨论】:

    • 我试过了,但还是一样。我想知道我只需要一个代码来等到函数'movenext'完成......
    【解决方案2】:

    您有没有尝试在点击事件的末尾添加“return false”?

    jQuery('#nextset').click(function (event) {
                movenext('set');
                jQuery('html,body').animate({ scrollTop: $('#subtitles').offset().top }, 2000);
                event.preventDefault();
                return false;
            });
    

    【讨论】:

      【解决方案3】:

      我最终会写出这样的东西。还是涨了一点,但至少页面没有跳转

       jQuery('#favdiv' + obj).fadeOut('fast', function () { 
           jQuery('#favdiv' + obj).remove(); 
       });
       setTimeout(function () {
           jQuery('html,body').animate({ scrollTop: $('#subtitles').offset().top }, 1500);
       }, 500);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        • 2016-09-05
        • 2016-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多