jQuery - जमा पर अतिरिक्त पैरामीटर जोड़ें (ajax नहीं)


206

JQuery के 'सबमिट' का उपयोग करना - क्या एक फॉर्म में अतिरिक्त मापदंडों को पारित करने का एक तरीका है? मैं इसे अजाक्स के साथ नहीं देख रहा हूं - यह सामान्य, ताज़ा-विशिष्ट रूप प्रस्तुत करना है।

$('#submit').click(function () {
    $('#event').submit(function () {
        data: { 
        form['attendees'] = $('#attendance').sortable('toArray').toString();
    });
});

आप किस सर्वर साइड तकनीक का उपयोग कर रहे हैं?
एनरिक

मेरा उत्तर देखें [यहाँ] [१], जो सबमिट करने से पहले क्रमबद्ध रूप में लागू होता है। [१]: stackoverflow.com/questions/17809056/…
जेफ लोरी

एक पर नजर डालें stackoverflow.com/questions/603924/...
LCJ

जवाबों:


371

यह मेरे लिए यह किया है:

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

Daff के उत्तर पर आधारित है, लेकिन NAME विशेषता को प्रपत्र संग्रह में दिखाने के लिए जोड़ा गया है और VALUE को VAL में बदल दिया गया है, साथ ही FORM की ID (मेरे मामले में form1) की भी जाँच की

तत्व डाला गया था या नहीं यह जाँचने के लिए फ़ायरफ़ॉक्स फ़ायरबग का उपयोग किया।

छिपे हुए तत्व फॉर्म संग्रह में वापस पोस्ट किए जाते हैं, केवल पढ़ने के लिए केवल फ़ील्ड छोड़ दिए जाते हैं।

मिशेल


46
मैं बाइनरी में 'आप मेरी धूप हैं' कैसे गाते हैं? बहुत बहुत धन्यवाद। यह बहुत सारी चीजों को हल करता है।
Ciel

38
आप पठनीयता को थोड़ा सुधार सकते हैं: var input = $ ("<input>", {type: "hidden", नाम: "mydata", मूल्य: "bla"}); $ ( '# Form1') संलग्न ($ (इनपुट))।
कॉन्सटेंटाइन कालबाज़ोव

2
$ ("<इनपुट>")। Attr ("प्रकार", "छिपा हुआ")। Attr ("नाम", "mydata")। val ("bla")। परिशिष्ट ('# form1'); एक और तरीका है
कीव

6
मुझे: $ ("<इनपुट>", {प्रकार: "छिपा हुआ", नाम: "mydata", मूल्य: "bla"}) का एक कॉम्बो पसंद आया। appendTo ("# form1");
गाबियो

क्या डेटा साइज़ की कोई सीमा नहीं है? मैंने JSON.stringify (obj) और इस पद्धति का उपयोग करके कुछ बड़ी वस्तु भेजी और यह छोटा दिखाई दिया।
omikron

26

आपके मामले में इसे गतिशील रूप से अपने छिपे हुए क्षेत्र को जोड़ने के लिए पर्याप्त होना चाहिए।

var input = $("<input>").attr("type", "hidden").val("Bla");
$('#form').append($(input));

मेरे द्वारा सबमिट किया जाने वाला डेटा फ़ॉर्म-सक्षम नहीं है। इसे सर्वर साइड पर कैप्चर और हैंडल करना होगा।
सिल

"सक्षम नहीं बनने" से आपका क्या तात्पर्य है?
विन्सेन्ट रामधनी

क्षमा करें - यह बिल्कुल काम नहीं किया। यहां तक ​​कि सिर्फ मजबूर डेटा के साथ, यह इसे रूप में इंजेक्ट नहीं करता है।
सिल

इसे फॉर्म फील्ड में नहीं रखा जा सकता है।
सिल

2
अगर इसकी एक स्ट्रिंग इसे एक फॉर्म फील्ड में लगाई जा सकती है
PetersenDidIt

19

आप भी इस एक का उपयोग कर सकते हैं। मेरे लिए अच्छा काम किया

$("#registerform").attr("action", "register.php?btnsubmit=Save") 
$('#registerform').submit();

यह btnsubmit को सबमिट करेगा = register.php फॉर्म में GET मान के रूप में सहेजें।


यह अधिक सुरुचिपूर्ण समाधान की तरह लगता है। बस encodeURIComponent()डेटा के प्रकार के आधार पर पैरामीटर मान के लिए उपयोग करना याद रखें ।
एंड्रेस एसके

1
यह वास्तव में बेहतर है जब उपयोगकर्ता कई बार फॉर्म जमा करने की अनुमति देता है। फॉर्म में विभिन्न मूल्यों के साथ एक से अधिक छिपे हुए फ़ील्ड नहीं होंगे।
मेलन

11

आप एक jQuery फ़ंक्शन लिख सकते हैं जिसने आपको किसी प्रपत्र में छिपे हुए फ़ील्ड जोड़ने की अनुमति दी है:

// This must be applied to a form (or an object inside a form).
jQuery.fn.addHidden = function (name, value) {
    return this.each(function () {
        var input = $("<input>").attr("type", "hidden").attr("name", name).val(value);
        $(this).append($(input));
    });
};

और फिर सबमिट करने से पहले छिपा हुआ क्षेत्र जोड़ें:

var frm = $("#form").addHidden('SaveAndReturn', 'Save and Return')
                    .submit();

1
AddHidden के अधिक उन्नत संस्करण के लिए stackoverflow.com/questions/2601223/… देखें
जोनाथन

1
मुझे इस समाधान की सरलता पसंद है। यह कई मामलों को संभालता नहीं है लेकिन यह अच्छी तरह से इस मामले को संभालता है।
फिल

11

आपको सबमिट ईवेंट के क्लिक पर सबमिट ईवेंट पर क्लिक करने की आवश्यकता नहीं है, केवल सबमिट ईवेंट को बांधें और यह सबमिट इवेंट को किसी भी मैटर पर कब्जा नहीं करेगा कि यह कैसे ट्रिगर हो जाता है।

सोचें कि आप जो चाहते हैं, वह सॉर्टेबल जमा करना है जैसे कि आप अजाक्स के माध्यम से करेंगे। ऐसा कुछ करने की कोशिश करें:

var form = $('#event').submit(function () {
    $.each($('#attendance').sortable('toArray'),function(i, value){
        $("<input>").attr({
            'type':'hidden',
            'name':'attendace['+i+']'
        }).val(value).appendTo(form);
    });
});

अभी भी सर्वर की ओर से नहीं दिखा रहा है फॉर्मेशन ... क्या किसी विशेष को सर्वर पर दिखाने के लिए एक छिपे हुए क्षेत्र को प्राप्त करना है? यह FormCollection ऑब्जेक्ट का उपयोग करके C # / ASP.NET MVC से गुजर रहा है।
Ciel

मेरे उत्तर को अपडेट करें, मुझे लगता है कि आप क्या करने की कोशिश कर रहे हैं।
PetersenDidIt

क्या आप nameजनरेट किए गए छुपे हुए इनपुट में कोई विशेषता जोड़ रहे हैं ? के अनुसार stackoverflow.com/questions/504681/... ऐसा FormCollection वस्तुओं सभी की आवश्यकता होती है लग रहा है <input>नामों की तत्वों।
npdoty

हां, मैं कॉमा से अलग किए गए मानों की एक स्ट्रिंग के रूप में एक प्रकार से फॉर्मकोलेक्शन में धकेलने की कोशिश कर रहा हूं। मैंने आपके अपडेट की कोशिश की है और यह अभी भी पोस्ट नहीं करता है। मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं ... मैं मदद की सराहना करता हूं।
Ciel

ऐसा लगता है कि समस्या क्लाइंट की तरफ नहीं बल्कि सर्वर साइड की है।
पीटर्सनडिट

2

इसी तरह का उत्तर, लेकिन मैं इसे आसान / त्वरित परीक्षण के लिए उपलब्ध कराना चाहता था।

var input = $("<input>")
               .attr("name", "mydata").val("go Rafa!");

$('#easy_test').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script>



<form id="easy_test">
  
</form>

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