मैं jQuery में क्रमबद्ध रूप डेटा कैसे संशोधित कर सकता हूं?


82

मैं AJAX में अपना फॉर्म जमा करने की कोशिश कर रहा हूं, इसलिए मुझे डेटा को अनुक्रमित () करना है। लेकिन मैं उपयोग कर रहा हूं fckEditorऔर jQuery को नहीं पता कि इससे कैसे निपटना है, इसलिए क्रमांकन के बाद, मैं मैन्युअल रूप से मूल्य को संशोधित करने की कोशिश कर रहा हूं, लेकिन अब तक कोई भाग्य नहीं ... कोई भी विचार

if(content_val!=""){
    var values = $("#frmblog").serialize();
    values.content = content_val; //content_val is the manually fetched data which I am trying to insert into the serialized content.
    alert(content_val); alert(values);
}

आप इसे क्रमबद्ध करने से पहले क्यों नहीं डालें?
एडम एरॉल्ड

समस्या यह है कि, सीरीज़ की प्रक्रिया के दौरान 'सामग्री' कुंजी में कुछ डिफ़ॉल्ट मान सेट किए जा रहे हैं, इसलिए मैं सिर्फ एक नया मान संलग्न नहीं कर सकता, मुझे इसमें पहले से ही अपडेट करना होगा
Bluemagica

आह, वह चीजें बदल देता है; मेरा अद्यतन उत्तर देखें।
टीजे क्राउडर

जवाबों:


155

serializeप्रपत्र फ़ील्ड वाले URL-एन्कोडेड स्ट्रिंग देता है। यदि आपको इसे संलग्न करने की आवश्यकता है, तो आप मानक URL-एन्कोडेड स्ट्रिंग नियमों का उपयोग करते हैं, जैसे:

var values = $("#frmblog").serialize();
values += "&content=" + encodeURIComponent(content_val);

(उपर्युक्त मान लिया जाता है valuesकि serializeकॉल के बाद हमेशा एक ही मूल्य होगा ; यदि यह जरूरी नहीं है कि सही हो, तो निर्धारित करें कि क्या इसका उपयोग &करना है या नहींvalues आप इसे जोड़ने से पहले खाली है , इसके ।)

वैकल्पिक रूप से, यदि आप चाहें, तो आप उपयोग कर सकते हैं serializeArrayऔर फिर सरणी में जोड़ सकते हैं और jQuery.paramपरिणाम को एक क्वेरी स्ट्रिंग में बदल सकते हैं, लेकिन यह एक लंबा रास्ता लगता है:

// You can also do this, but it seems a long way 'round
var values = $("#frmblog").serializeArray();
values.push({
    name: "content",
    value: content_val
});
values = jQuery.param(values);

अद्यतन : एक टिप्पणी में बाद में आपने कहा:

समस्या यह है कि, सीरीज़ प्रक्रिया के दौरान 'सामग्री' कुंजी में कुछ डिफ़ॉल्ट मान सेट किए जा रहे हैं, इसलिए मैं सिर्फ एक नया मान संलग्न नहीं कर सकता, मुझे इसमें पहले से ही अपडेट करना होगा "

वह चीजों को बदल देता है। यह contentURL-एन्कोडेड स्ट्रिंग के भीतर देखने के लिए एक दर्द है , इसलिए मैं सरणी के साथ जाऊंगा:

var values, index;

// Get the parameters as an array
values = $("#frmblog").serializeArray();

// Find and replace `content` if there
for (index = 0; index < values.length; ++index) {
    if (values[index].name == "content") {
        values[index].value = content_val;
        break;
    }
}

// Add it if it wasn't there
if (index >= values.length) {
    values.push({
        name: "content",
        value: content_val
    });
}

// Convert to URL-encoded string
values = jQuery.param(values);

आप शायद इसे एक पुन: प्रयोज्य कार्य करना चाहते हैं।


4

यहाँ @ JJ के उत्तर पर आधारित एक पूर्ण jquery प्लगइन है। आप कॅाल कर सकते हैं

$('form#myForm').awesomeFormSerializer({
    foo: 'bar',
})

जो मान 'बार' के साथ परम 'फू' को बदल देगा या जोड़ देगा (या किसी अन्य परम को जो आप वस्तु में जोड़ते हैं)

jQuery प्लगइन:

// Not builtin http://stackoverflow.com/a/5075798/2832282
(function ( $ ) {
    // Pass an object of key/vals to override
    $.fn.awesomeFormSerializer = function(overrides) {
        // Get the parameters as an array
        var newParams = this.serializeArray();

        for(var key in overrides) {
            var newVal = overrides[key]
            // Find and replace `content` if there
            for (index = 0; index < newParams.length; ++index) {
                if (newParams[index].name == key) {
                    newParams[index].value = newVal;
                    break;
                }
            }

            // Add it if it wasn't there
            if (index >= newParams.length) {
                newParams.push({
                    name: key,
                    value: newVal
                });
            }
        }

        // Convert to URL-encoded string
        return $.param(newParams);
    }
}( jQuery ));

3

अब ES15 के साथ। आप इसे वर्तमान प्रस्तुत मूल्य के संपादन के लिए उपयोग कर सकते हैं (सबसे कम एक)

var values = $("#frmblog").serializeArray();
values.find(input => input.name == 'content').value = content_val;
console.log(values);

या देशी समारोह

var values = $("#frmblog").serializeArray();
values.find(function(input) { 
    return input.name == 'content';
}).value = content_val;
console.log(values);

1

निम्न कार्य का उपयोग करें जो मेरे लिए काम करता है

function(elementName,newVal)
{
    var postData = $("#formID").serialize();

var res = postData.split("&");
var str = "";

for(i=0;i<res.length;i++)
  {
    if(elementName == res[i].split("=")[0])
      {
        str += elementName + "=" + newVal+ "&";
      }
      else
      {
        str += res[i] + "&";
      }
  }
return str;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.