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

时间:2012-08-08 21:43:33

标签: jquery jquery-ui jquery-ui-dialog

我有以下代码:

    $(".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-dialog课程的定位。它没有修改(使用谷歌的CDN)
  • 不取消活动 - 正如您所看到的,我致电stopPropagationpreventDefault返回false。所以不是事件正在进行(即使它是,它也不是页面顶部的哈希链接)。

使用jQuery 1.72和jQuery UI 1.8.21(每个版本的最新版本)。

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

我在使用带有href标签的jQuery对话框时遇到了类似的问题。我需要做的就是从a标签中删除href =“#”并解决了我的问题。

<a href='#'>SHOW</a>更改为<a>SHOW</a>

答案 2 :(得分:0)

尝试添加一个关闭函数并在其中使用preventDefault,为我工作

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

答案 3 :(得分:0)

我找到的最好的解决方法是返回false;打开对话框后。

所以只要移动你的回报是假的;对话框功能之外。我知道这是一个老问题,但在这里没有看到这个决议,它对我有用。

你的stopPropagation,preventDefault()的问题,并返回false;是因为他们都在错误的地方。

我就是这样做的。

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

答案 4 :(得分:-1)

由于//Loop Starts var singlePoi = { "id": poiData[i].id, "latitude": parseFloat(poiData[i].latitude), "longitude": parseFloat(poiData[i].longitude), "altitude": parseFloat(poiData[i].altitude), "title": poiData[i].name, "description": poiData[i].description, "urlidle": poiData[i].urlidle, "urlselected": poiData[i].urlselected }; // Now do operations with singlePoi //Loop ends 标记而滚动。

使用

<a href=""></a>

防止滚动到顶部