通过对话框提交的表单再次打开对话框
Posted
技术标签:
【中文标题】通过对话框提交的表单再次打开对话框【英文标题】:Form submitted via dialog opens dialog again 【发布时间】:2012-10-24 17:00:56 【问题描述】:我在通过 jQuery Ajax 提交的 jquerymobile 对话框中有一个表单。
目前我的问题是,一旦提交表单,相同的对话框会在原始对话框的顶部再次打开。
这样我的网址在提交之前就可以读取:
url/index.php#&ui-state=dialog
然后在提交之后:
url/index.php#&ui-state=dialog#&ui-state=dialog&ui-state=dialog
有没有人遇到过这样的事情?
[编辑添加的代码示例]
$(function()
$("#form").submit(function(e)
e.preventDefault();
var dataString = $("#form").serialize();
errorInput = $("input[name=valOne]#valOne").val();
$.ajax(
type: "GET",
url: "formHandler.php",
data: dataString,
dataType: "text",
success: function(data)
if(data.toLowerCase().indexOf("error") >= 0)
alert(data);
$(".ui-dialog").dialog("close");
$("#valOne").val(errorInput); //the reentering info so user doesn't have to
else
$(".ui-dialog").dialog("close");
location.href="index.php";
,
error:function (xhr, ajaxOptions, thrownError)
alert(thrownError);
);
);
);
【问题讨论】:
如果有人有想法,我仍然会遇到这个问题。 我意识到缺少一些代码,我已经添加了它,希望这可以更好地了解发生了什么。 【参考方案1】:-
您可以使用此submit 在表单上设置自己的处理程序
为页面和对话窗口使用两种表单。
【讨论】:
抱歉,我没有提到我已经在使用.submit()
处理表单,并且当收到$(".ui-dialog").dialog("close")
的成功响应时,应该会关闭对话窗口,但不是t.【参考方案2】:
您是否尝试过使用 $.mobile.changePage("url here") 代替 location.href? 更多细节在这里http://jquerymobile.com/test/docs/api/methods.html
【讨论】:
这行得通,谢谢,但是如果我要像这样更改成功响应怎么办,我将如何防止对话框再次打开并确保原始对话框中的输入更改而不是副本原来是开过的?success: function(data) if(data.toLowerCase().indexOf("error") >= 0) alert(data); $("input[name=username]").val(errorUser); //errorUser set before Ajax is run else $(".ui-dialog").dialog("close"); location.href="index.php"; ,
我不完全理解您的评论。您是否在问如何确保再次打开对话框时它不会在表单中包含以前的值?如果这就是您要问的问题,您可以通过在更改页面之前重置对话框的表单来解决它:成功回调中的 $("#form")[0].reset()。
我遇到的部分问题是,当 Ajax 脚本成功运行时,对话窗口会在其自身之上再次打开(如上面的 URL 所示)并且我提到的变量的值是然后应用于新的/复制的对话框。然后你有两个对话框要关闭而不是。只有一个。
我从您的第一条评论中了解到,使用 $.mobile.changePage 已经解决了对话框重新打开的问题。不是这样吗?
抱歉,不,它确实解决了重定向问题。【参考方案3】:
用JS刷新页面而不是重新加载会不会更容易?它可能会调用两次对话框函数。
【讨论】:
【参考方案4】:我在表单方面遇到了类似的问题。我决定改用<div data-role="fieldcontain">
。现在它运行良好,没有“刷新效果”。在这种情况下,您应该制作自己的消息而不是 .serialize。
【讨论】:
避免用户序列化没有任何效果,你用<div data-role="fieldcontain">
而不是<form>
?
是的。表格有问题。我制作了 fieldcontain 和一个按钮。单击按钮时,我使用之前动态准备的消息进行了简单的 ajax 调用。以上是关于通过对话框提交的表单再次打开对话框的主要内容,如果未能解决你的问题,请参考以下文章