1

我有一个表单需要在提交之前进行验证,POST 到一个弹出窗口,然后表单需要在之后重置。

我知道target="newWindowName"and onsubmit="window.open('','newWindowName','')"form 属性有效,但这并不能让我在提交后做任何事情。

我知道我可以$('form').ajaxSubmit()用来指定提交后功能,但它似乎并没有让我打开一个新窗口。

我怎样才能一次完成所有这些事情?

这是我的表格:

<form id="myForm" target="newWindow" autocomplete="on" action="/myUrl" method="post">

这是我的 JavaScript:

$('#myForm').submit(function(e) { 
    e.preventDefault();
    if ($('#myForm').valid()) {
        var options = {
            target: '',
            beforeSubmit: function () {
                this.target = "newWindow"; 
                window.open("", "newWindow", "width=500,height=450");
            },
            success: function () {
                hideForm();
                $('#myForm').resetForm();
            }
        };

        $(this).ajaxSubmit(options);
    }
    return false;
}
4

2 回答 2

2

这是我最终采用的解决方案,它更加优雅。

<form id="myForm" target="newWindow" autocomplete="on" action="/myUrl" method="post">

然后是JS:

$('#myForm').submit(function(e) {
    if ($(this).valid()) {
        var f = this;
        window.open("",$(this).attr("target"),"width=500,height=500"); 
        setTimeout(function () {  // delay resetting the form until after submit
            hideForm();
            f.reset();
        }, 0);
        return true;
    }
    else {
        e.preventDefault();  // only prevent default if the form is not valid
    } 
    return false;
});

这样,新窗口只有在表单有效时才会显示。

于 2012-05-11T18:10:13.943 回答
1

target在表单标签中使用属性的想法是正确的。这将自动将表单提交到名为“newWindow”的窗口。(要始终提交到窗口,请使用target="_blank"。)

问题是您阻止表单提交到该新窗口,然后使用 JavaScript 进行 ajax 提交。如果您删除该额外代码,您将得到您想要的:

$('#myForm').submit(function(e) {
    if ($(this).valid()) {
        var f = this;
        setTimeout(function () {  // delay resetting the form until after submit
            hideForm();
            f.reset();
        }, 0);
    }
    else {
        e.preventDefault();  // only prevent default if the form is not valid
    } 
});

工作演示:http: //jsfiddle.net/2x6wL/

于 2012-04-24T00:10:49.653 回答