如何防止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;
});
如果我在页面上向下滚动并提交表单,当显示对话框时,它会将页面滚动到顶部。有什么方法可以推翻这一点吗
不是解决方案的事情
- 正在修复
类的位置。它未经修改(使用谷歌的CDN).ui对话框
- 不取消事件-如您所见,我调用
,stopPropagation
,并返回false。因此,事件并不是在进行(即使是这样,也不是指向页面顶部的哈希链接)preventDefault
使用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>