Как я использую form.serialize jQuery, но исключаю пустые поля

  1. В основном вам необходимо реализовать интерфейс ICloneable, а затем реализовать копирование структуры объектов.
  2. Если это глубокая копия всех членов, вам необходимо застраховать (не относясь к выбранному решению), что все дети также клонируются.
  3. Иногда вам нужно знать какое-то ограничение во время этого процесса, например, если вы копируете объекты ORM, большинство фреймворков разрешают только один объект, прикрепленный к сеансу, и вы НЕ ДОЛЖНЫ делать клоны этого объекта или если возможно, вам нужно заботиться о сеансе прикрепления этих объектов.

Приветствия.

104
задан Tom Viner 15 June 2009 в 16:14
поделиться

5 ответов

Я просматривал документы jQuery , и я думаю, что мы можем сделать это в одной строке с помощью селекторы :

$("#myForm :input[value!='']").serialize() // does the job!

, Очевидно, #myForm получает элемент с идентификатором "myForm", но что было менее очевидно для меня, сначала был то, что пробел необходим между #myForm и: вход, как это потомок оператор.

: вход соответствия весь вход, текстовая область, выбор и элементы кнопки.

[значение! =, ''] атрибут не равный фильтр. Странное (и полезный) вещь то, что все: вход типы элемента имеют атрибуты значения, даже выбирает и флажки и т.д.

Наконец, чтобы также удалить исходные данные, где значение 'было' (как упомянуто в вопросе):

$("#myForm :input[value!=''][value!='.']").serialize()

В этом сопоставлении случая, т.е. размещение двух селекторов атрибута друг рядом с другом , подразумевает И. Используя запятую подразумевает ИЛИ. Извините, если это очевидно для людей CSS!

165
ответ дан Tom Viner 24 November 2019 в 04:08
поделиться

Вы могли сделать это с regex...

var orig = $('#myForm').serialize();
var withoutEmpties = orig.replace(/[^&]+=\.?(?:&|$)/g, '')

Тесты:

orig = "a=&b=.&c=&d=.&e=";
new => ""

orig = "a=&b=bbb&c=.&d=ddd&e=";
new => "b=bbb&d=ddd&"  // dunno if that trailing & is a problem or not
8
ответ дан nickf 24 November 2019 в 04:08
поделиться

Я посмотрел бы на исходный код для jQuery. В строке последней версии 3287.

я мог бы добавить в функциях "serialize2" и "serializeArray2". конечно, назовите их чем-то meaniful.

Или лучший путь должен был бы записать что-то для вытаскивания неиспользованного Вара из serializedFormStr. Некоторый regex, который ищет = & в середине строки или заканчивающийся в = Какие-либо regex мастера вокруг?

ОБНОВЛЕНИЕ: мне нравится ответ rogeriopvl лучше (+1)... тем более, что я не могу найти хорошие regex инструменты прямо сейчас.

1
ответ дан BuddyJoe 24 November 2019 в 04:08
поделиться

Вы могли бы хотеть посмотреть на .each () функция jQuery, которая позволяет Вам выполнять итерации через каждый элемент селектора, таким образом, этот путь, которым можно пойти, проверяет каждое поле ввода и видит, пусто ли это или не, и затем удалите его из формы с помощью element.remove (). После этого можно сериализировать форму.

-1
ответ дан rogeriopvl 24 November 2019 в 04:08
поделиться

Альтернатива решение Rich:

$('#form').submit(function (e) {
  e.preventDefault();

  var query = $(this).serializeArray().filter(function (i) {
    return i.value;
  });

   window.location.href = $(this).attr('action') + (query ? '?' + $.param(query) : '');
});

Объяснения:

  • .submit() рычаги на форму submit событие
  • e.preventDefault() препятствует тому, чтобы форма отправила
  • .serializeArray(), дает нам представление в виде массива строки запроса, которая была отправленной.
  • .filter() удаляет falsy (включая пустой) значения в том массиве.
  • $.param(query) создает сериализированное и совместимое URL представление нашего обновленного массива
  • , устанавливание значения к window.location.href отправляет запрос
0
ответ дан 24 November 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: