1. ホーム
  2. jquery

[解決済み] jQueryでシリアライズされたフォームデータを変更するにはどうすればよいですか?

2023-06-27 01:01:37

質問

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

どのように解決するのですか?

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


更新 : 後日追加されたコメントで、あなたはこう言っています。

問題は、セリライズ処理中に 'content' キーにいくつかのデフォルト値が設定されているため、新しい値を添付することができず、すでにある値を更新しなければならないことです"。

そうなると変わってきますね。探すのが面倒なので content をURLエンコードされた文字列の中から探すのは面倒なので、私なら配列にします。

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

これを再利用可能な関数にしたいのでしょう。