1

送信前に検証する必要があるフォームがあり、ポップアップ ウィンドウに POST してから、後でフォームをリセットする必要があります。

target="newWindowName"およびフォーム属性が機能することは知ってonsubmit="window.open('','newWindowName','')"いますが、送信後に何もできません。

送信後の関数を指定するために使用できることはわかって$('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 に答える