동적으로 양식 생성 및 제출


81

jQuery에 즉시 양식을 만들고 제출하는 방법이 있습니까?

아래와 같은 것.

<html>
    <head>
    <title> Title Text Goes Here </title>
    <script src="http://code.jquery.com/jquery-1.7.js"></script>
    <script>
        $(document).ready(function(){alert('hi')});
        $('<form/>').attr('action','form2.html').submit();
    </script>
    </head>
    <body>

        Content Area

    </body>
    </html>

이것이 작동해야하나요 아니면 다른 방법이 있나요?


API 를 읽었 습니까?
geoffreak

또한 여기에서 허용 된 답변을 살펴보십시오 : stackoverflow.com/questions/14836557/…
thdoan

답변:


108

코드에 두 가지 문제가 있습니다. 첫 번째 $(document).ready();는 요소를 생성하는 jQuery 개체를 포함 했지만 래핑하지 않은 것입니다.

두 번째는 사용하던 방법입니다. jQuery는 선택기 (또는 일반적으로 선택기를 배치 할 위치)가 생성하려는 요소로 대체 ​​될 때 모든 요소를 ​​생성합니다. 그런 다음 본문에 추가하고 제출하면됩니다.

$(document).ready(function(){
    $('<form action="form2.html"></form>').appendTo('body').submit();
});

작동중인 코드는 다음과 같습니다 . 이 예제에서는 양식 요소를 추가한다는 것을 증명하기 위해 자동 제출이 아닙니다.

다음 은 자동 제출 기능 있는 코드입니다. 잘 작동합니다. Jsfiddle은 "form2.html"이 서버에 존재하지 않기 때문에 404 페이지로 이동합니다.


언급 한 첫 번째 문제는 문제가 아닙니다. :)
Santosh Gokak 2011

2
@ user42540 : 반드시 그런 것은 아니지만 페이지로드가 완료되면 JS 코드를 실행하는 것이 좋습니다. 이렇게하면 원치 않는 오류를 방지 할 수 있습니다.
Purag 2011

3
일부 브라우저에서 작동 할 수 있지만 대부분의 DOM 조작 코드를 $(document).ready()블록 안에 포함해야하는 좋은 이유가 있습니다 . 브라우저가 DOM을 안전하게 변경할 수 있도록 보장합니다. 그렇지 않으면 IE6 / 7과 같은 까다로운 브라우저가 전체 페이지가로드되기 전에 변경하려고하면 더미를 뱉어냅니다.
GregL 2011

99

예, 가능합니다. 솔루션 중 하나는 다음과 같습니다 ( jsfiddle as a proof ).

HTML :

<a id="fire" href="#" title="submit form">Submit form</a>

(위에는 양식이 없습니다 참조)

자바 스크립트 :

jQuery('#fire').click(function(event){
    event.preventDefault();
    var newForm = jQuery('<form>', {
        'action': 'http://www.google.com/search',
        'target': '_top'
    }).append(jQuery('<input>', {
        'name': 'q',
        'value': 'stack overflow',
        'type': 'hidden'
    }));
    newForm.submit();
});

위의 예제는 양식 작성 방법, 입력 추가 방법 및 제출 방법을 보여줍니다. 때때로 결과 표시가에서 금지되어 X-Frame-Options있으므로 기본 창의 내용을 대체하는로 설정 target했습니다 _top. 또는을 설정하면 _blank새 창 / 탭에 표시 될 수 있습니다.


좋은 솔루션 (약간 길지만)이지만 입력이 표시되지 않았습니다.
Purag

@Purmou : 실제 해결책은 양식을 만든 다음 submit()호출하는 것입니다. 양식과 요소를 만드는 방법을 보여주기 위해 의도적으로 긴 양식 생성 코드를 제공했습니다. 나는 이것이 꽤 괜찮다고 믿는다.
Tadeck 2011

22
Firefox (23.0.1)에서 작동하려면 .appendTo ( 'body')가 필요합니다. 그렇지 않으면 양식 객체 만 반환하지만 제출하지는 않습니다.
Curtis Yallop 2013 년

5
newForm.hide (). appendTo ( "body"). submit (); // 필드를 표시하지 않고 FF에서 작동합니다.
laffuste 2013

4
이것은 GET을 수행하며 쿼리 문자열을 대상 URI에 고정하는 것과 유사합니다. 많은 사람들이 POST에 양식을 사용하고 싶어한다고 가정합니다. 명확하지 않은 경우 사용 'method': post하여 수행하십시오.
ficuscr

35

jQuery가없는 My 버전, 간단한 기능을 즉시 사용할 수 있습니다.

함수:

function post_to_url(path, params, method) {
    method = method || "post";

    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        if(params.hasOwnProperty(key)) {
            var hiddenField = document.createElement("input");
            hiddenField.setAttribute("type", "hidden");
            hiddenField.setAttribute("name", key);
            hiddenField.setAttribute("value", params[key]);

            form.appendChild(hiddenField);
         }
    }

    document.body.appendChild(form);
    form.submit();
}

용법:

post_to_url('fullurlpath', {
    field1:'value1',
    field2:'value2'
}, 'post');

13

Purmou와 비슷하지만 제출이 완료되면 양식을 제거합니다.

$(function() {
   $('<form action="form2.html"></form>').appendTo('body').submit().remove();
});

9

Josepmra 예제는 내가 필요한 것에 잘 맞습니다. 하지만 나는 줄을 추가해야했다

 form.appendTo( document.body )

작동합니다.

var form = $(document.createElement('form'));
$(form).attr("action", "reserves.php");
$(form).attr("method", "POST");

var input = $("<input>")
    .attr("type", "hidden")
    .attr("name", "mydata")
    .val("bla" );


$(form).append($(input));

form.appendTo( document.body )

$(form).submit();

8

예, 따옴표를 잊어 버렸습니다 ...

$('<form/>').attr('action','form2.html').submit();

자바 스크립트 오류는 무엇입니까? 준비 기능에 넣으십시오
Nicolas Thery 2011

이것은 HTML DOM에 첨부되지 않으므로 이전 IE에서는 작동하지 않습니다. <body>작동을 시작하기 전에 추가해야합니다 .
Raptor

4

이 코드로 시도해보세요
. 완전히 동적 인 솔루션입니다.

    var form = $(document.createElement('form'));
    $(form).attr("action", "reserves.php");
    $(form).attr("method", "POST");

    var input = $("<input>").attr("type", "hidden").attr("name", "mydata").val("bla");
    $(form).append($(input));
    $(form).submit();

2

왜 당신 $.post이나 $.get직접 하지 않습니까?

GET 요청 :

$.get(url, data, callback);

POST 요청 :

$.post(url, data, callback);

그러면 양식이 필요하지 않고 데이터 개체에 데이터를 보내기 만하면됩니다.

$.post("form2.html", {myField: "some value"}, function(){
  alert("done!");
});

1
서버에서 다운로드를 트리거해야하기 때문에 게시 / 가져 오기가 작동하지 않습니다.
a20

또한 이것으로 당신은 페이지를 떠나지 않습니다.
robsch

@ a20 Content-Disposition: Attachment;다운로드를 강제 하는 서버 측 헤더가 부족합니다 .
SparK

@SparK hmmmm .. 귀하의 의견은 브라우저가 다운로드를 해석 (또는 해석 및 강제하지 않음) 할 수있는 서버 측에 MIME 유형이 없는지 궁금합니다. 예를 들어 zip 파일입니다. 사용자의 다운로드 요청에 대한 응답으로 지정하는 것이 불가능하므로 다운로드를 트리거하십시오 ...
a20

@ a20 예, Content-Type: application/octet-stream;. 도있다 download앵커의 속성은 ... 클라이언트 측 일 ( davidwalsh.name/download-attribute )
스파크

0

일부 매개 변수가있는 양식을 작성하고 POST 호출을 작성한다고 가정합니다.

var param1 = 10;

$('<form action="./your_target.html" method="POST">' +
'<input type="hidden" name="param" value="' + param + '" />' +
'</form>').appendTo('body').submit();

원한다면 한 줄로 모두 할 수 있습니다 :-)


0

Jquery 사용

$('<form/>', { action: url, method: 'POST' }).append(
    $('<input>', {type: 'hidden', id: 'id_field_1', name: 'name_field_1', value: val_field_1}),
    $('<input>', {type: 'hidden', id: 'id_field_2', name: 'name_field_2', value: val_field_2}),
).appendTo('body').submit();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.