Próbuję przesłać swój formularz w AJAX, więc muszę serializować () dane. Ale ja używam fckEditor
i jQuery nie wie, jak sobie z tym poradzić, więc po serializacji próbuję ręcznie zmodyfikować wartość, ale na razie bez szczęścia ... jakieś pomysły
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);
}
jquery
serialization
fckeditor
Bluemagica
źródło
źródło
Odpowiedzi:
serialize
zwraca ciąg zakodowany w adresie URL zawierający pola formularza. Jeśli chcesz dołączyć do niego, możesz to zrobić, korzystając ze standardowych reguł ciągów zakodowanych w adresie URL, np .:var values = $("#frmblog").serialize(); values += "&content=" + encodeURIComponent(content_val);
(Powyższe zakłada, że
values
poserialize
wywołaniu zawsze będzie jedna wartość ; jeśli to niekoniecznie jest prawdą, określ, czy użyć&
na podstawie tego, czyvalues
jest pusta, zanim do niej dodasz.)Alternatywnie, jeśli chcesz, możesz użyć,
serializeArray
a następnie dodać do tablicy i użyćjQuery.param
do przekształcenia wyniku w ciąg zapytania, ale wydaje się, że to długa droga:// 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);
Aktualizacja : W komentarzu dodanym później powiedziałeś:
To wszystko zmienia. Trudno jest szukać w
content
ciągu zakodowanym w adresie URL, więc wybrałbym tablicę: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);
Prawdopodobnie chciałbyś, aby ta funkcja była wielokrotnego użytku.
źródło
Oto pełna wtyczka jquery oparta na odpowiedzi @ TJ. Możesz zadzwonić
$('form#myForm').awesomeFormSerializer({ foo: 'bar', })
Która zastąpi lub doda parametr „foo” wartością „bar” (lub jakimkolwiek innym parametrem, który dodasz w obiekcie)
Wtyczka 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 ));
źródło
Z ES15 teraz. Możesz użyć tego zamiast tego do edycji aktualnie przesłanej wartości (najkrótszej)
var values = $("#frmblog").serializeArray(); values.find(input => input.name == 'content').value = content_val; console.log(values);
lub funkcja natywna
var values = $("#frmblog").serializeArray(); values.find(function(input) { return input.name == 'content'; }).value = content_val; console.log(values);
źródło
użyj następującej funkcji, która zadziałała dla mnie
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; }
źródło