javascript - JQuery 序列化表单未在 IE 中触发

标签 javascript jquery ajax internet-explorer

我遇到了 jquery 对话框内的表单无法在 IE 中发布的问题。

它在 Chrome 和 FF 中运行良好,将数据发送到我的 MVC Controller ,但从 IE 发送空值。

我确实通过调用警报来显示序列化结果,以一种方式使其工作。这会导致表单正确序列化并将值发送到服务器。

$("<div id='formModal'><img src='../../Content/images/ajax-loader.gif' /></div>")
                    .addClass("dialog")
                    .attr("id", $(this).attr("data-dialog-id"))
                    .appendTo("body")
                    .dialog({
                        width: 800,
                        position: [300, 50],
                        title: $(this).attr("data-dialog-title"),
                        close: function () { $(this).dialog('destroy').remove(); window.location.reload(true); },
                        modal: true,
                        buttons: {
                            "Save": function () {
                                var formdata = $("#timeForm").serialize();
                                $.post("/TimeTracker/AddTime",
                                    $("#timeForm").serialize());
                                alert(formdata);
                                $(this).dialog("close");
                                $(this).dialog("destroy");
                                window.location.reload(true);
                                return false;
                            },
                            Cancel: function () {
                                $(this).dialog("close");
                                $(this).dialog("destroy");
                            }
                        }
                    })
                .load(this.href);

一旦删除警报,表单就不再具有序列化值。

这是我的 JQuery 脚本中的错误吗?还是别的什么?

最佳答案

您有用于对话框的close事件处理程序,每当您关闭对话框时,它都会重新加载页面window.location.reload(true)

在“保存”按钮上,您要做很多事情,发布表单,关闭对话框并再次重新加载页面。

如果您确实想在发布表单后重新加载页面,请等待帖子响应。您可以在其成功处理程序中编写代码。此外,重新加载页面无论如何都会关闭处理程序,因此您不必再次调用 $(this).dialog("close") ,这将触发 close 事件重新加载页面。

试试这个。

          buttons: {
                        "Save": function () {
                            var formdata = $("#timeForm").serialize();
                            $.post("/TimeTracker/AddTime",
                                formdata, function(){
                                window.location.reload(true);
                            });
                            //alert(formdata);
                            //$(this).dialog("close");
                            //$(this).dialog("destroy");
                            //window.location.reload(true);
                            return false;
                        },
                        Cancel: function () {
                            $(this).dialog("close");
                            $(this).dialog("destroy");
                        }
                    }

关于javascript - JQuery 序列化表单未在 IE 中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9317450/

相关文章:

javascript - PHP 提交后 jQuery 加载同一页面

javascript - JavaScript 中的 Unity 动态参数/参数类型

javascript - 我如何判断复选框是否已选中?

javascript - div中的按钮不起作用

ajax - 在 ajax 可以做的地方使用 websocket/socket.io 有什么缺点?

javascript - 如何通过一个 onclick 事件更改两个单独的图像?

Jquery 日期选择器下一个和上一个按钮图像未显示

javascript - Ajax/Javascript - 仅刷新一次

php - 使用 JQuery/AJAX 将 html 表单数据作为 JSON 发送到 PHP

javascript - 使用 JSON 将 PHP 多维数组转换为 Javascript?