2012-08-08 38 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

相關問題