2012-08-08 62 views
3

我有以下代码:如何防止jquery.ui.dialog从滚动窗口顶端(programaticallly调用时)

$(".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类的定位。它未经修改(使用Google的CDN)
  • 不取消事件 - 如您所见,我致电stopPropagation,preventDefault,返回false。因此,这不是该事件是通过去(即使它是,它不是一个哈希链接到页面顶部反正)

使用jQuery 1.72和jQuery UI 21年8月1日(每个最新版本) 。

+0

尝试让请将其scrollTop和设置页面的scrollTop的。 – 2012-08-08 21:48:53

+0

你的意思是'currentScroll = $(window).scrollTop(); $ dialog .... {open:function(){$(window).scrollTop(currentScroll)}}'我的意思是,显然我可以做到这一点。我很喜欢,更重要的是它不会滚动,因为它正在打破页面。 – 2012-08-08 21:50:31

回答

2

我有使用jQuery对话框与href标记类似的问题。我需要做的只是从a标签中删除href =“#”并解决了我的问题。

变化<a href='#'>SHOW</a><a>SHOW</a>

+0

这不是一个哈希链接。 – 2013-02-11 20:06:18

3

我不得不使用jQuery对话框,HREF标记相同的问题,我解决它加入“event.preventDefault();”当我invoque对话框,例如:

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

如果您阅读我附加的代码,您会看到我使用event.stopPropagation,event.preventDefault并返回false。 – 2013-09-17 17:10:43

+0

这种方法适用于我的情况,在垂直高度比浏览器(Firefox 23)视口更长的页面上召唤模态对话框。 – 2013-10-01 17:44:29

0

尝试加入了近一个功能和使用的preventDefault内,工作对我来说

$form.show().dialog({ 
       close: function (event) { event.preventDefault(); } 
       resizable: false, 
       etc.... 
      }); 
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; 
+0

要么我真的误解了一些东西,要么你没有仔细看我的代码。正在表单提交事件上调用stopPropagation和preventDefaults。成功功能中没有事件,因此没有事件停止。与返回false相同:成功函数中没有事件,因此返回false将不会产生任何效果。 – 2015-02-03 15:38:15