如何防止jquery.ui.dialog将窗口滚动到顶部(以编程方式调用时)

如何防止jquery.ui.dialog将窗口滚动到顶部(以编程方式调用时),jquery,jquery-ui,jquery-ui-dialog,Jquery,Jquery Ui,Jquery Ui Dialog,我有以下代码: $(".foo-form").submit(function (event) { event.stopPropagation(); event.preventDefault(); $.ajax({ url: this.action, data: $(this).serializeArray(), type: 'POST', dat

我有以下代码:

    $(".foo-form").submit(function (event) {
        event.stopPropagation();
        event.preventDefault();
        $.ajax({
            url: this.action,
            data: $(this).serializeArray(),
            type: 'POST',
            dataType: 'json',
            success: function (data, msg, resp) {
                var $form = $("#second-form");
                $form.show().dialog({
                    resizable: false,
                    height:400,
                    width: 600,
                    modal: true,
                    title: "Recommendation added",
                    buttons: [
                        {
                            text: "OK",
                            click: doOK
                        },
                        {
                            text: "Cancel",
                            click: doCancel
                        }
                    ]
                });
            }
        })
        return false;
    });
如果我在页面上向下滚动并提交表单,当显示对话框时,它会将页面滚动到顶部。有什么方法可以推翻这一点吗

不是解决方案的事情

  • 正在修复
    .ui对话框
    类的位置。它未经修改(使用谷歌的CDN)
  • 不取消事件-如您所见,我调用
    stopPropagation
    preventDefault
    ,并返回false。因此,事件并不是在进行(即使是这样,也不是指向页面顶部的哈希链接)

使用jQuery1.72和jQueryUI1.8.21(每个版本的最新版本)。

我对使用带有href标记的jQuery对话框也有类似的问题。我所要做的就是将href=“#”从a标记中删除,这就解决了我的问题


更改为
显示

我在使用带有href标记的jQuery对话框时遇到了同样的问题,我在调用对话框时添加了“event.preventDefault();”,解决了这个问题,例如:

$(".button").click(function(event){
event.preventDefault();
$("#dialog").dialog();
});

尝试添加一个函数关闭并在内部使用preventDefault,对我有用

$form.show().dialog({
                close: function (event) { event.preventDefault(); }
                resizable: false,
                etc....
            });

我发现最好的解决办法是返回false;打开对话框之后

所以,只要把你的回报移到虚假;在对话框函数之外。我知道这是一个老问题,但我没有看到这个决议,它对我起了作用

stopPropagation、preventDefault()的问题,并返回false;他们都在错误的地方

我就是这样做的

   $("<div><p>" + text + "</p></div>").dialog({
        modal: true,
        resizable: false,
        width: width,
        buttons: {
            Ok: function() {
                $(this).dialog("close");
            }
        }
    });
    return false;
$(“”+text+“

”)对话框({ 莫代尔:是的, 可调整大小:false, 宽度:宽度, 按钮:{ 好的:函数(){ $(此).dialog(“关闭”); } } }); 返回false;
由于标签的缘故,它会滚动

使用



要防止滚动到顶部

请尝试获取其滚动顶部并设置页面的滚动顶部。您的意思是类似于
currentScroll=$(window.scrollTop()$dialog…{open:function(){$(window).scrollTop(currentScroll)}}
我的意思是,显然我能做到。我非常非常希望它根本不滚动,因为它会破坏页面。如果你阅读我的附加代码,你会看到我使用event.stopPropagation、event.preventDefault并返回false。这种方法适用于我的情况,我在垂直高度比浏览器长的页面上调用模式对话框(Firefox 23)要么我真的误解了什么,要么你没有仔细看我的代码。正在表单提交事件上调用StopRoPagation和PreventDefault。success函数中没有事件,因此没有要停止的事件。与return false相同:success函数上没有任何事件,因此return false不会产生任何效果。它不是一个链接。没有
标记。
<a class="someClass" href=#!"></a>