औपचारिक रूप से फॉर्म बनाएं और सबमिट करें


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>

क्या यह काम करने वाला है या ऐसा करने का कोई अलग तरीका है?


क्या आपने एपीआई पढ़ा है ?
जियोफ्रॉक

यहां भी स्वीकृत उत्तर पर एक नज़र डालें: stackoverflow.com/questions/14836557/…
thdoan

जवाबों:


108

आपके कोड में दो चीजें गलत थीं। पहला यह है कि आपने $(document).ready();उस jQuery ऑब्जेक्ट को शामिल नहीं किया है जो इसके साथ तत्व बना रहा है।

दूसरी वह विधि थी जिसका आप उपयोग कर रहे थे। jQuery किसी भी तत्व का चयन करेगा जब चयनकर्ता (या जहां आप आमतौर पर चयनकर्ता को रखेंगे) को उस तत्व से बदल दिया जाएगा जिसे आप बनाना चाहते हैं। फिर आप इसे केवल शरीर में जोड़ते हैं और इसे जमा करते हैं।

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

यहां कोड इन एक्शन है। इस उदाहरण में, यह ऑटो सबमिट नहीं करता है, बस यह साबित करने के लिए कि यह फार्म तत्व को जोड़ देगा।

यहां ऑटो सबमिट के साथ कोड दिया गया है। यह ठीक काम करता है। Jsfiddle आपको 404 पेज पर ले जाता है क्योंकि "form2.html" अपने सर्वर पर मौजूद नहीं है, जाहिर है।


पहला मुद्दा जिसका आपने उल्लेख किया है, हालांकि यह मुद्दा नहीं है :)
संतोष गोकक

2
@ user42540: जरूरी नहीं है, लेकिन जब पृष्ठ लोड हो चुका हो तो अपने जेएस कोड को फायर करना बेहतर है। इससे अवांछित त्रुटियों को रोका जा सकेगा।
०४:११ बजे ०११ पराग

3
यह कुछ ब्राउज़रों पर काम कर सकता है, लेकिन एक $(document).ready()ब्लॉक के अंदर अधिकांश डोम हेरफेर कोड को शामिल करने का एक अच्छा कारण है - यह सुनिश्चित करता है कि ब्राउज़र डोम में किसी भी परिवर्तन को सुरक्षित रूप से करने में सक्षम है। यदि आप पूरे पृष्ठ को लोड करने से पहले कुछ भी बदलने की कोशिश करते हैं, तो IE6 / 7 जैसे picky ब्राउज़र डमी थूकते हैं।
ग्रेग

99

हाँ यह संभव है। समाधान में से एक नीचे है ( प्रमाण के रूप में jsfiddle )।

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, तो यह नई विंडो / टैब में दिखाई दे सकता है।


अच्छा समाधान (हालांकि थोड़ा लंबा), लेकिन इनपुट दिखाई नहीं दिया।
पुराग

@Purmou: वास्तविक समाधान फॉर्म निर्माण है और फिर submit()कॉल करें। मैंने जानबूझकर प्रपत्र और उसके तत्वों को बनाने के तरीके को दिखाने के लिए लंबे फॉर्म निर्माण कोड प्रदान किए। मेरा मानना ​​है कि यह काफी ठीक है।
टाडेक

22
.appendTo ('बॉडी') मेरे फ़ायरफ़ॉक्स (23.0.1) में काम करने के लिए आवश्यक है। अन्यथा यह सिर्फ एक फॉर्म ऑब्जेक्ट देता है लेकिन सबमिट नहीं करता है।
कर्टिस येलोप

5
newForm.hide ()। परिशिष्ट ("शरीर")। सबमिट करें (); //
फ्लॉप

4
जैसा कि यह एक GET है और URI को लक्ष्य स्ट्रिंग से निपटने के लिए समान है। मान लेंगे कि बहुत से लोग POST के लिए एक फॉर्म का उपयोग करना चाहते हैं। यदि यह स्पष्ट नहीं है, तो 'method': postइसे पूरा करने के लिए उपयोग करें।
फिकसक्र

35

JQuery के बिना इसका मेरा संस्करण, सरल कार्य मक्खी पर इस्तेमाल किया जा सकता है

समारोह:

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

पुरमौ की तरह, लेकिन सबमिट करते ही फॉर्म को हटा दिया जाएगा।

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

9

जोसेम्रा का उदाहरण मुझे अच्छी तरह से काम करने की जरूरत है। लेकिन मुझे लाइन जोड़ना था

 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();

जावास्क्रिप्ट त्रुटि क्या है? तैयार कार्य में इसे लगाने की कोशिश करें
निकोलस थ्री

यह पुराने IE पर काम नहीं करेगा, क्योंकि यह HTML DOM पर अटैच नहीं है। इससे <body>पहले कि यह काम करना शुरू कर दे, इसे जोड़ा जाना चाहिए ।
रैप्टर

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

इसके साथ ही आप पेज नहीं छोड़ेंगे।
रोज़बच

@ a20 क्या कमी है Content-Disposition: Attachment;डाउनलोड करने के लिए मजबूर करने के लिए सर्वर-साइड हेडर है।
20

@SparK हम्मम .. आपकी टिप्पणी मुझे आश्चर्यचकित करती है, क्या सर्वर साइड पर कोई माइम-प्रकार नहीं है जो ब्राउज़र व्याख्या (या व्याख्या और बल नहीं) डाउनलोड कर सकते हैं। उदाहरण के लिए एक ज़िप फ़ाइल। क्या यह निर्दिष्ट करना किसी भी तरह से संभव नहीं है कि यह उपयोगकर्ता के डाउनलोड के अनुरोध के जवाब में है ताकि ट्रिगर डाउनलोड हो सके ...
a20

@ A20 हाँ, Content-Type: application/octet-stream;downloadएंकरों में भी विशेषता है ... क्लाइंट-साइड चीज़ ( davidwalsh.name/download-attribute )
SparK

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();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.