Pertanyaan Bagaimana cara mengubah data formulir serial di jQuery?


Saya mencoba mengirimkan formulir saya di AJAX, jadi saya harus membuat serial () data. Tapi saya menggunakan fckEditor dan jQuery tidak tahu cara mengatasinya, jadi setelah serialisasi, saya mencoba mengubah nilai secara manual, tetapi tidak berhasil sejauh ini ... ide apa pun

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

75
2018-02-22 08:32


asal


Jawaban:


serialize mengembalikan string yang dikodekan URL yang berisi kolom formulir. Jika Anda perlu menambahkannya, Anda melakukannya dengan menggunakan aturan string standar yang dikodekan URL, misalnya:

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

(Di atas mengasumsikan akan selalu ada satu nilai dalam values setelah serialize panggilan; jika itu belum tentu benar, tentukan apakah akan digunakan & berdasarkan apakah values kosong sebelum Anda menambahkannya.)

Bergantian, jika Anda suka, Anda dapat menggunakan serializeArray dan kemudian tambahkan ke array dan gunakan jQuery.param untuk mengubah hasilnya menjadi string kueri, tetapi sepertinya itu adalah putaran yang panjang:

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

Memperbarui: Dalam komentar ditambahkan kemudian Anda berkata:

Masalahnya adalah, ada beberapa nilai default yang ditetapkan dalam kunci 'konten' selama proses serilisasi, jadi saya tidak bisa hanya melampirkan nilai baru, saya harus memperbarui yang sudah ada di dalamnya. "

Itu mengubah banyak hal. Sangat sulit untuk dicari content dalam string berenkode URL, jadi saya akan menggunakan larik:

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

Anda mungkin ingin menjadikan ini fungsi yang dapat digunakan kembali.


141
2018-02-22 08:35



Berikut ini adalah plugin jquery penuh berdasarkan jawaban @ T.J. Anda bisa menelepon

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

Yang akan menggantikan atau menambahkan param 'foo' dengan nilai 'bar' (atau parameter lain yang Anda tambahkan pada objek)

plugin 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
2018-01-06 08:50