Есть ли обратная функция для сериализации jQuery? - PullRequest
5 голосов
/ 25 марта 2012

Я могу что-то написать, я спрашиваю, уже встроено ли что-то в jQuery.

Ответы [ 2 ]

16 голосов
/ 27 июня 2014

Краткий ответ: Нет , в jQuery нет чего-то встроенного для этого.Не уверен, почему бы не ...

Но - вот jQuery плагин , который должен помочь, если вы используете .serialize() дляполучить сериализованную строку:

$.fn.deserialize = function (serializedString) 
{
    var $form = $(this);
    $form[0].reset();    // (A) optional
    serializedString = serializedString.replace(/\+/g, '%20'); // (B)
    var formFieldArray = serializedString.split("&");

    // Loop over all name-value pairs
    $.each(formFieldArray, function(i, pair){
        var nameValue = pair.split("=");
        var name = decodeURIComponent(nameValue[0]); // (C)
        var value = decodeURIComponent(nameValue[1]);
        // Find one or more fields
        var $field = $form.find('[name=' + name + ']');

        // Checkboxes and Radio types need to be handled differently
        if ($field[0].type == "radio" || $field[0].type == "checkbox") 
        {
            var $fieldWithValue = $field.filter('[value="' + value + '"]');
            var isFound = ($fieldWithValue.length > 0);
            // Special case if the value is not defined; value will be "on"
            if (!isFound && value == "on") {
                $field.first().prop("checked", true);
            } else {
                $fieldWithValue.prop("checked", isFound);
            } 
        } else { // input, textarea
            $field.val(value);
        }
    });
    return this;
}

(A) Сброс вверху необязателен.Вы можете сначала сбросить значения полей или очистить их, используя что-то вроде этого: https://stackoverflow.com/a/6786237/1766230

(B) См. https://stackoverflow.com/a/24417399/1766230, почему нам нужноо замене +.

(C). См. Справочник по JavaScript для Mozilla Developer для получения информации о decodeURIComponent.

(Примечание. Если вы используете .serializeArray()или какой-либо другой способ сериализации ваших данных, описанный выше не будет работать, вы можете найти некоторые из этих полезных решений: плагин jQuery для сериализации формы, а также восстановления / заполнения формы?1038 * Пример скучного использования:

var $form = $('form.myFormClass');
var s = $form.serialize();
$form.deserialize(s);

Вот jsfiddle, который позволяет вам поиграться со значениями настроек, очисткой, сбросом и «десериализацией»: http://jsfiddle.net/luken/4VVs3/

1 голос
/ 25 марта 2012

Нет, нет.

Как бы вы узнали, какой элемент DOM изменить?Могут быть одинаковые элементы с одинаковыми именами в разных формах и т.д.: Object
Описание: принимает правильно сформированную строку JSON и возвращает полученный объект JavaScript.

...